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


28

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

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

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


gtk-recordmydesktop을 사용해 보셨습니까? 나는 그것으로 대부분의 것을 기록 할 수 있습니다. ffmpeg -i x11grab도 작동합니다. 오디오 alsa-loop 작동에 문제가있는 경우
RobotHumans

답변:


11

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

sudo apt-get install recordmydesktop

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


헤드셋을 착용 한 상태에서 사용했는데 상대방의 오디오를 녹음합니다. 기본 마이크에서 오디오를 녹음하고 있다고 생각합니다 (따라서 상대방의 목소리는 캡처하지 않고 자신의 목소리를 캡처하는 중이었습니다). 어떻게 고칠 수 있습니까?
Marcus Junius Brutus

11

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

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

1
감사! 웹캠 창과 다른 사람의 창과 같은 특정 창만 어떻게 기록 할 수 있습니까? 아마도 쉽게 편집 할 수 있도록 개별적으로 기록하는 방법도 있습니다.
curiousguy

1
@curiousguy, recordmydesktop을 사용하여 특정 창을 기록하려면 "xwininfo"를 사용하여 창 ID를 가져온 다음 recordmydesktop과 함께 "--windowid"매개 변수를 사용하십시오. 창을 특정 크기 (픽셀 단위)로 조정하려면 다른 방법이 있습니다 .Compiz에는 옵션이 있다고 생각합니다 .Openbox에서도 창 크기를 알려줍니다. (Fedora를 사용하고 있습니다.) 또한 Openbox가 창을 "장식"할 수있게한다고 믿습니다. 이것은 recordmydesktop이 창 경계선을 기록 할 때 도움이됩니다. 그러나 이것이 ffmpeg로 가능한지 확실하지 않습니까?
PJ Brunet 2018 년

우분투에서 x11grab를 활성화하여 어떻게 컴파일합니까? 어떤 패키지가 필요합니까?
v010dya

8

배경

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의 반향 제거 모듈이로드되었지만 내 음성 반향을 취소하기위한 것일뿐입니다. 문제는 마이크 오디오와 사운드 카드 오디오가 혼합 될 때 약간의 지연으로 인해 결과 스트림을 청취하기가 어렵다는 것입니다. 누구든지 마이크가 스피커에서 소리를 녹음하지 못하게하는 방법을 알고 있습니까?


최종 노트

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


2
와우. 자식 계정이 없으면 자식 계정을 시작 하고이 스크립트를 유지하고 싶을 수도 있습니다.
RobertL

Xavras에게, 모든 사용자 설정을 수정했으며 임시 파일 접두사를 변경하고 파일 형식에서 초를 제외했습니다. 스크립트를 실행할 때 "... ~ / Desktop / sky_20160506_12-10h.mkv : No such file or directory"오류가 발생합니다. 파일을 미리 작성하거나 루트로 실행해도 도움이되지 않습니다. 왜 이것이 될 수 있습니까?
superAnnoyingUser

@Student 님, 안녕하세요. 지금까지 정렬했을 수도 있지만 오늘 귀하의 의견에 대한 알림을 받았습니다. 인용 한 오류를 보면 물결표 (~)가 적절한 경로로 해결되지 않았다고 생각합니다. / home / student /와 같이 전체 형식으로 경로를 제공하십시오. 기록 또는 처리 스크립트에서 문제가 발생 했습니까?
Xavras Wyzryn 2016

4

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를 확인하십시오.


0

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

xvidcap

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.