วิธีบันทึกการสนทนาทางวิดีโอด้วย Skype บน Linux?


28

ฉันต้องการสัมภาษณ์วิดีโอที่บันทึกไว้กับ Skype และกำลังมองหาเครื่องมือที่น่าเชื่อถือเพื่อให้บรรลุเป้าหมายดังกล่าว

มีอะไรบ้างไหมที่ไม่ช้าหรือบั๊กกี้?

ฉันกำลังใช้งาน (K) Ubuntu


คุณเคยลอง gtk-recordmydesktop แล้วหรือยัง? ฉันสามารถบันทึกได้ทุกอย่างด้วย ffmpeg -i x11grab ก็ทำงานเช่นกัน หากคุณมีปัญหาในการใช้งานเสียง alsa-loop
RobotHumans

ลองถามที่askubuntu.com
Adam Byrtek

คำตอบ:


11

มีซอฟต์แวร์ recordMyDesktop http://recordmydesktop.sourceforge.net/about.phpซึ่งคุณสามารถบันทึกส่วนใด ๆ ของหน้าจอที่คุณต้องการ ฉันใช้มันเพื่อบันทึกการประชุม Skype ของฉัน

sudo apt-get install recordmydesktop

เพื่อติดตั้งจากช่องทางหลัก


ฉันเคยใช้มันในขณะที่สวมชุดหูฟังและมันจะบันทึกเสียงของอีกฝ่าย ฉันเดาว่ามันคือการบันทึกเสียงจากไมโครโฟนเริ่มต้น (ดังนั้นจึงจับเสียงของฉันเอง แต่ไม่ใช่ของอีกฝ่าย) ความคิดใดที่จะแก้ไขได้อย่างไร
Marcus Junius Brutus

11

คำสั่งนี้จะจับภาพเดสก์ท็อปทั้งหมดของคุณ: ดังนั้นให้ใช้คำสั่งนี้เมื่อใดก็ตามที่คุณต้องการบันทึกการสนทนาแบบ Skype (หรือสิ่งอื่นใด)

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

1
ขอบคุณ! ฉันจะบันทึกเฉพาะหน้าต่างเฉพาะเช่นหน้าต่างของเว็บแคมและหน้าต่างของบุคคลอื่นได้อย่างไร บางทีแม้แต่วิธีการบันทึกแยกต่างหากเพื่อให้ง่ายต่อการแก้ไข
curiousguy

1
@crossguy เพื่อบันทึกหน้าต่างเฉพาะด้วย recordmydesktop ให้ใช้ "xwininfo" เพื่อรับ id หน้าต่างจากนั้นกับ recordmydesktop ให้ใช้พารามิเตอร์ "--windowid" หากคุณต้องการปรับขนาดหน้าต่างของคุณให้มีขนาดเฉพาะ (เป็นพิกเซล) มีวิธีที่แตกต่างกัน - ฉันเชื่อว่า Compiz มีตัวเลือกนี้ Openbox จะบอกขนาดหน้าต่างให้คุณทราบ (ฉันใช้ Fedora) และฉันเชื่อว่า Openbox จะช่วยให้คุณ "ยกเลิกการตกแต่ง" หน้าต่างซึ่งจะมีประโยชน์หาก recordmydesktop กำลังบันทึกขอบหน้าต่างของคุณ อย่างไรก็ตามฉันไม่แน่ใจว่าจะเป็นไปได้ด้วย ffmpeg หรือไม่
PJ Brunet

คอมไพล์เดียวกับ x11grab จะเปิดใช้งานภายใต้ Ubuntu อย่างไร ต้องการแพ็คเกจอะไร
v010dya

8

พื้นหลัง

การบันทึกวิดีโอสดและเสียงในระหว่างการโทร (หรือระหว่างกิจกรรม X11 บนเดสก์ท็อป) นั้นไม่ยากมากขอบคุณ ffmpeg และจำนวนบทความช่วยเหลือที่มีให้ (รวมถึงไซต์นี้) อย่างไรก็ตามหากคุณตั้งเป้าหมายที่คุณภาพสูงกว่าคุณจะถึงขีด จำกัด ของวิธีการง่ายๆในการดึงและบีบอัดสื่อพร้อมกัน ดังนั้นความต้องการเครื่องมือ (หรือชุดเครื่องมือ) ที่จะช่วยให้:

  1. บันทึกการโทรโดยไม่บีบอัดลงในไฟล์เพื่อการประมวลผลเพิ่มเติมจำได้ว่าเมื่อโทรหาโทรศัพท์เราสนใจเฉพาะเสียง
  2. บีบอัดการโทรที่บันทึกไว้ด้วยคุณภาพสูงในภายหลัง

สคริปต์ทุบตีต่อไปนี้ ( myrec, myrec-novideoและmyproc) เป็นความพยายามของฉันที่งานนี้ ฉันแน่ใจว่ามีวิธีเขียนสคริปต์เหล่านี้ที่เหนือกว่า แต่ฉันได้เรียนรู้การเขียนสคริปต์ของ 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
ว้าว. คุณอาจต้องการเริ่มบัญชี git หากคุณยังไม่มีและยังคงสคริปต์เหล่านี้ไว้
RobertL

เรียน Xavras ฉันได้แก้ไขการตั้งค่าผู้ใช้ทั้งหมดและฉันเปลี่ยนคำนำหน้าไฟล์ชั่วคราวและไม่รวมวินาทีจากรูปแบบไฟล์ เมื่อเรียกใช้สคริปต์ฉันได้รับข้อผิดพลาด "... ~ / Desktop / sky_20160506_12-10h.mkv: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว" การสร้างไฟล์ล่วงหน้าหรือใช้งานในขณะที่รูทไม่ได้ช่วยอะไร เหตุใดจึงเป็นเช่นนี้
superAnnoyingUser

สวัสดี @ นักเรียนคุณอาจจะแยกออกตอนนี้ แต่ฉันได้รับการแจ้งเตือนเกี่ยวกับความคิดเห็นของคุณวันนี้เท่านั้น ดูข้อผิดพลาดที่คุณยกมาฉันจะคิดว่าเครื่องหมายตัวหนอน (~) ไม่ได้รับการแก้ไขในเส้นทางที่เหมาะสม ลองระบุเส้นทางในแบบเต็มเช่น / home / student / คุณพบปัญหาในสคริปต์การบันทึกหรือการประมวลผลหรือไม่?
Xavras Wyzryn

4

Open Broadcaster Software (OBS) Studio เชื่อมโยงข้อกำหนดเหล่านี้ไว้ในส่วนหน้าใช้งานง่าย

เป็นโอเพ่นซอร์สและข้ามแพลตฟอร์ม:

สำหรับ Ubuntu 15.04 และใหม่กว่า:

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

สำหรับ distros อื่น ๆ / Ubuntu รุ่นก่อนหน้าเช็คเอาต์ git wiki


0

xvidcap อนุญาตให้คุณเลือกพื้นที่จากเดสก์ท็อปของคุณและบันทึก เริ่มต้นด้วยคำสั่ง

xvidcap

ค้นหาวิดีโอของคุณที่. /test-0000.mpeg โดยค่าเริ่มต้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.