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

Skype와 녹화 된 비디오 인터뷰를하고 싶습니다.이를 달성하기위한 신뢰할 수있는 도구를 찾고 있습니다.

느리거나 버그가없는 것이 있습니까?

(K) 우분투를 실행 중입니다.



답변

당신이 원하는 화면의 어떤 부분을 기록 할 수있는 소프트웨어 recordMyDesktop http://recordmydesktop.sourceforge.net/about.php 소프트웨어가 있습니다 . 스카이프 세션을 기록하는 데 사용합니다.

sudo apt-get install recordmydesktop

메인 채널에서 설치합니다.


답변

이 명령은 전체 데스크탑을 캡처합니다. 따라서 스카이프 대화 (또는 다른 것)를 기록 할 때마다이 명령을 사용하십시오.

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


답변

배경

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

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

다음 Bash 스크립트 ( myrec, myrec-novideomyproc)는이 작업에서 시도한 것입니다. 나는이 스크립트를 작성하는 더 좋은 방법이 있다고 확신하지만, 이동 중에 Bash 스크립팅을 배우고있었습니다.

전제 조건

  1. ffmpeg
  2. pulseaudio
  3. skype

시스템에 1있거나 2없는 경우 선호하는 패키지 관리자와 함께 설치하십시오 (사용합니다 synaptic). 대한 skype방문 www.skype.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.mkv. 여기서 YYYYMMDD_HHMMSS기록 날짜 및 시간입니다.

  3. 중지 할 준비가되면 녹음 q중인 터미널 창에서을 누릅니다 ffmpeg.
  4. . myproc파일을 처리 (압축)하기 위해 실행 합니다. 수동으로 수행하거나 부재 cron중일 때 수행 할 작업을 설정할 수 있습니다.
  5. 압축이 예상대로 진행된 것을 확인하면 temp_파일을 삭제 하십시오.

이슈

  1. 마이크를 이름으로 지정할 수 없으며 특수 값만 사용할 수 있습니다 default. 마이크 이름을 사용했지만 시스템 업데이트 후이 설정이 작동을 멈췄습니다. 내 설정에만 제한되거나 무언가로 제한 될 수 있습니다 pulseaudio.
  2. 마이크 오디오에 내 음성과 스피커의 사운드가 포함되어 있습니다. 스피커의 사운드가 사운드 카드에서 직접 녹음 된 오디오 스트림 뒤에 약간 있습니다. Pulse의 반향 제거 모듈이로드되었지만 내 음성 반향을 취소하기위한 것일뿐입니다. 문제는 마이크 오디오와 사운드 카드 오디오가 혼합 될 때 약간의 지연으로 인해 결과 스트림을 청취하기가 어렵다는 것입니다. 누구든지 마이크가 스피커에서 소리를 녹음하지 못하게하는 방법을 알고 있습니까?

최종 노트

이 도구가 유용하기를 바랍니다. 개선과 의견에 대한 귀하의 생각을 기다리겠습니다.


답변

OBS (Open Broadcaster Software) Studio는 이러한 모든 요구 사항을 사용하기 쉬운 프런트 엔드에 묶습니다.

오픈 소스이며 크로스 플랫폼입니다.

우분투 15.04 이상 :

sudo add-apt-repository ppa:obsproject/obs-studio
sudo apt-get update && sudo apt-get install obs-studio ffmpeg

다른 배포판 / 이전 우분투 버전은 git wiki를 확인하십시오.


답변

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

xvidcap

기본적으로 ./test-0000.mpeg에서 비디오를 찾으십시오.


답변