Linux에서 Skype 화상 통화를 녹음하는 방법은 무엇입니까?

Linux에서 Skype 화상 통화를 녹음하는 방법은 무엇입니까?

저는 Skype를 통해 녹화된 비디오 인터뷰를 진행하고 이를 달성할 수 있는 신뢰할 수 있는 도구를 찾고 있습니다.

느리지도 번거롭지도 않은 것이 있을까요?

나는 (K)Ubuntu를 실행하고 있습니다.

답변1

이 명령은 전체 데스크탑을 캡처합니다. 따라서 Skype 대화(또는 기타)를 녹음하고 싶을 때마다 이 명령을 사용하세요.

ffmpeg -f x11grab -s wxga -r 25 -i :0.0 -sameq /tmp/out.mpg   

답변2

소프트웨어 기록이 있습니다MyDesktophttp://recordmydesktop.sourceforge.net/about.php화면의 원하는 부분을 녹화할 수 있습니다. 저는 Skype 세션을 녹음하는 데 사용합니다.

sudo apt-get install recordmydesktop

메인 채널에서 설치하세요.

답변3

배경

통화 중(또는 X11 데스크톱 활동 중) 라이브 비디오 및 오디오를 녹음하는 것은 ffmpeg 및 사용 가능한 많은 도움말 기사(이 사이트 포함) 덕분에 그리 어렵지 않습니다. 그러나 목표가 더 높은 품질이라면 미디어를 동시에 가져오고 압축하는 간단한 방법의 한계에 빠르게 도달하게 될 것입니다. 따라서 다음을 수행할 수 있는 도구(또는 도구 세트)가 필요합니다.

  1. 추가 처리를 위해 파일로 압축하지 않고 통화를 녹음합니다. 전화를 걸 때 오디오에만 관심이 있다는 점을 인식하세요.
  2. 나중에 녹음된 통화를 고품질로 압축하세요.

다음 Bash 스크립트( myrec, myrec-novideomyproc)는 이 작업에 대한 나의 시도입니다. 이 스크립트를 작성하는 더 깔끔한 방법이 있다고 확신하지만 Bash 스크립트를 배우고 있습니다(추가할 수도 있고 일단 작동하게 되면 꽤 만족합니다).

전제 조건

  1. ffmpeg
  2. pulseaudio
  3. skype

시스템에 존재하거나 존재하지 않는 1경우 선호 하는 패키지 관리자(제가 사용하는)를 사용하여 설치하십시오. 보기 위해2synapticskypewww.스카이프.com.


무손실 비디오 및 무손실 오디오 기록 -myrec

  1. 텍스트 파일 만들기
  2. myrec다른 이름으로 저장하거나 원하는 이름 으로 저장하세요 .
  3. myrec다음 명령을 실행하여 실행 가능하게 만드십시오.chmod +x myrec
  4. 다음 코드를 붙여넣고 User settings설정에 맞게 섹션을 수정합니다.

#!/bin/bash

echo "Record lossless audio and lossless video for further processing."
echo "Created file name always starts with temp_YYYYMMDD_HHMMSS."
echo "Syntax:"
echo "myrec [optional file description]"
echo "Optional file description is appended to the file name, with spaces replaced by underscores."
echo
echo

### User settings - adjust values to suit your system and needs

# I used to have the name of my webcam mic here, but that stopped working after a system update. "default" was the only fix I found. If you have more than one microphone connected, you may need to tell Pulseaudio which mic you want to be the default, I think pavucontrol is the utility for it.
# If you want to try supplying a name here, run pacmd, then within it the command list-sources will give you a list of possible microphones. Use the name field value without angle brackets.
microphone_audio_device="default"

# Run pacmd, within it the command list-sinks will give you a list of devices to choose from. Use the name field value without angle brackets.
speakers_audio_device="alsa_output.pci-0000_00_1b.0.analog-stereo.monitor"

# Select frame size.
# Some standard frame sizes for reference:
# wvga 852x480
# wxga 1366x768
# wsxga 1600x1024
# wuxga 1920x1200
# woxga 2560x1600
# wqsxga 3200x2048
# wquxga 3840x2400
# whsxga 6400x4096
# whuxga 7680x4800
frame_size="wsxga"

# Framerate in frames per second
framerate="30"

# Indicate which screen the video should be recorded from and an optional offset.
# For example:
# :0.0+10,20
# where 0.0 is display.screen number of your X11 server, same as the DISPLAY environment variable. 10 is the x-offset and 20 the y-offset of the frame, measured from the top left corner of the screen to the top left corner of the frame.
frame_position=":0.0"

# Include the trailing slash after target directory name.
# Expect a very large file!
target_directory="/target/directory/name/"

### End of user settings



record_command="ffmpeg -f pulse -thread_queue_size 512k -i $speakers_audio_device -f pulse -thread_queue_size 512k -i $microphone_audio_device -f x11grab -s $frame_size -r $framerate -thread_queue_size 512k -i $frame_position -map 0 -map 1 -map 2 -codec:a copy -codec:v libx264 -qp 0 -preset ultrafast"
temporary_file_prefix="temp_"

# The IFS (Internal Field Separator) system variable stores the character that separates command line arguments.
# We can use it to replace spaces with underscores.
temp=$IFS
IFS='_'
description="$*"
IFS=$temp

if [ $# -eq 0 ]; then
  $record_command $target_directory$temporary_file_prefix`date +%Y%m%d_%H%M%S`.mkv
else
  $record_command $target_directory$temporary_file_prefix`date +%Y%m%d_%H%M%S`_$description.mkv
fi

오디오 녹음만 다음 섹션의 별도 스크립트에 의해 처리됩니다.


무손실 오디오만 녹음 -myrec-novideo

  1. 텍스트 파일 만들기
  2. myrec-novideo다른 이름으로 저장하거나 원하는 이름 으로 저장하세요 .
  3. myrec-novideo다음 명령을 실행하여 실행 가능하게 만드십시오.chmod +x myrec-novideo
  4. 다음 코드를 붙여넣고 User settings설정에 맞게 섹션을 수정합니다.

#!/bin/bash

echo "Record lossless audio for further processing."
echo "Created file name always starts with temp_YYYYMMDD_HHMMSS."
echo "Syntax:"
echo "myrec-novideo [optional file description]"
echo "Optional file description is appended to the file name, with spaces replaced by underscores."
echo
echo


### User settings - adjust values to suit your system

# I used to have the name of my webcam mic here, but that stopped working after a system update. "default" was the only fix I found. If you have more than one microphone connected, you may need to tell Pulseaudio which mic you want to be the default, I think pavucontrol is the utility for it.
# If you want to try supplying a name here, run pacmd, then within it the command list-sources will give you a list of possible microphones. Use the name field value without angle brackets.
microphone_audio_device="default"

# Run pacmd, within it the command list-sinks will give you a list of devices to choose from. Use the name field value without angle brackets.
speakers_audio_device="alsa_output.pci-0000_00_1b.0.analog-stereo.monitor"

# Include the trailing slash after target directory name.
# Expect a large file!
target_directory="/target/directory/name/"

### End of user settings



record_command="ffmpeg -f pulse -thread_queue_size 512k -i $speakers_audio_device -f pulse -thread_queue_size 512k -i $microphone_audio_device -map 0 -map 1 -codec:a copy -codec:a copy"
temporary_file_prefix="temp_"

# The IFS (Internal Field Separator) system variable stores the character that separates command line arguments.
# We can use it to replace spaces with underscores.
temp=$IFS
IFS='_'
description="$*"
IFS=$temp

if [ $# -eq 0 ]; then
  $record_command $target_directory$temporary_file_prefix`date +%Y%m%d_%H%M%S`.mkv
else
  $record_command $target_directory$temporary_file_prefix`date +%Y%m%d_%H%M%S`_$description.mkv
fi


녹음 파일 처리 중 -myproc

  1. 텍스트 파일 만들기
  2. myproc다른 이름으로 저장하거나 원하는 이름 으로 저장하세요 .
  3. myproc다음 명령을 실행하여 실행 가능하게 만드십시오.chmod +x myproc
  4. 다음 코드를 붙여넣고 User settings설정에 맞게 섹션을 수정합니다.


#!/bin/bash

echo "Compress files recorded with myrec or myrec-novideo."
echo "For files to be processed they need to reside in the storage directory and start with temp_"
echo "The two audio tracks (mic and speakers) are mixed together into one new stream, but they are also available as separate tracks in the final file."

# Mixing is because players I know cannot play two audio tracks from the same file simultaneously.
# The mic also captures sounds produced by the speakers. It has two effects:
# 1. You can use this single track to hear both yourself (the mic) and whatever came out of your speakers. Personally I did not like the degraded quality of recorded speaker sounds, hence the direct recording off the sound card and mixing that with the mic track.
# 2. Speaker sounds recorded by the mic are slightly delayed when compared to the direct recording off the sound card. The mixed track is thus hard to listen to.
# I do have echo cancellation module loaded in Pulseaudio, perhaps there is something wrong with my configuration?

### User settings

# Indicate storage directory without the trailing slash
storage_directory="/storage/directory/name"

### End of user settings

# Any temp_ file may contain 3 streams (audio, audio, video) indexed as (0, 1, 2), or just 2 streams (audio, audio) indexed as (0, 1).
# A file temp2_ contains just one stream: both audio streams from temp_ mixed.
# The step with temp2_ is necessary as the mixing option (-filter_complex) is a global option (i.e. not stream-specific). Attempts at doing it all in one go prevent the separate tracks from being copied into the final file.

for f in $storage_directory/temp_*
do
  if [ -e ${f/temp_/} ]
  then
    # Do not overwrite an existing final file. Prevents unnecessary work when the script is run regularly as a cron job.
    echo "$f: A final file (without temp_) already exists. Skipping. If you want to reencode, please delete the final file manually."
  else
    # Variable g will contain the name of the second temporary file with both audio streams mixed into one.
    g=${f/temp_/temp2_}

    # Mixing mic and sound card tracks into one stream
    ffmpeg -i "$f" -map 0:0 -map 0:1 -filter_complex amix=inputs=2:duration=longest:dropout_transition=2 -codec:a libvorbis -n "$g"

    # Create the final file: copy the mixed audio stream from temp2_, add and compress both separate audio streams from temp_, compress at high quality the video stream from temp_.
    # The question mark in -map 0:2? tells ffmpeg to ignore the error if this stream (video) is missing. Allows this same script to be used for audio-only recordings.
    ffmpeg -i "$f" -i "$g" -map 1:0 -map 0:0 -map 0:1 -map 0:2? -codec:a:0 copy -codec:a:1 libvorbis -codec:a:2 libvorbis -codec:v libx264 -qp 18 -preset slow -threads 0 -n "${g/temp2_/}"

    # Delete temp2_
    rm "$g"
  fi
done


ffmpeg유연성 덕분에 myproc비디오 스트림을 포함하거나 포함하지 않을 수 있는 파일을 처리할 수 있습니다.


스크립트 사용 방법

  1. Skype 영상통화 창을 화면에 위치시키고 창 크기를 원하는 크기로 설정하세요. Skype는 이 창 설정을 기억하므로 한 번만 수행하면 됩니다. 이후의 각 호출에서 창은 동일한 크기로 동일한 위치에 나타납니다. myrec설정을 알려주는 것을 잊지 마세요 . 일반적으로 화상 통화 창을 웹캠 가까이에 배치하여 상대방이 자신이 자신의 눈을 바라보고 있다고 생각할 수 있도록 하세요.
  2. 터미널 창을 엽니다. 녹음을 시작하려면 언제든지 다음 명령을 사용하십시오.

    • 오디오 및 비디오 녹화:. myrec some description
    • 오디오만 녹음:. myrec-novideo some description

    some description두 스크립트 모두에서 선택 사항입니다. Tab일부 입력을 저장하기 위해 키를 사용하여 스크립트 이름을 확장 할 수 있습니다 . 녹음 날짜와 시간이 있는 파일 ffmpeg에 녹음이 시작됩니다 .temp_YYYYMMDD_HHMMSS_some_description.mkvYYYYMMDD_HHMMSS

  3. 중지할 준비가 되면 녹음 q터미널 창을 누르세요.ffmpeg
  4. . myproc파일을 처리(압축)하려면 실행하세요 . 이 작업은 수동으로 수행하거나 cron부재 중일 때 수행하도록 작업을 설정할 수 있습니다 .
  5. 압축이 예상대로 작동하는지 확인한 후 파일을 삭제합니다 temp_.


질문

  1. 마이크는 이름으로 지정할 수 없으며 특수한 값만 사용할 수 있습니다 default. 예전에는 마이크 이름이 있었는데 시스템 업데이트 이후 이 설정이 작동하지 않게 되었습니다. 이는 내 설정으로 제한되거나 pulseaudio.
  2. 마이크 오디오는 내 목소리와 스피커에서 나오는 소리로 구성됩니다. 스피커에서 나오는 사운드는 사운드 카드에서 직접 녹음된 오디오 스트림보다 약간 지연됩니다. Pulse울림제거 모듈이 탑재되어 있는데 그냥 본인의 목소리 울림을 취소하는 수준인 것 같습니다. 문제는 마이크 오디오가 사운드 카드 오디오와 혼합될 때 약간의 지연으로 인해 결과 스트림이 듣기에 불편할 수 있다는 것입니다. 마이크가 스피커의 소리를 녹음하지 못하게 하는 방법을 아는 사람이 있습니까?


최종 메모

이 도구가 도움이 되길 바랍니다. 개선을 위한 여러분의 아이디어와 의견을 기다리겠습니다.

답변4

xvidcap을 사용하면 데스크탑에서 영역을 선택하고 녹화할 수 있습니다. 명령을 사용하여 시작하십시오.

xvidcap

기본적으로 비디오는 ./test-0000.mpeg에 있습니다.

관련 정보