Bagaimana cara merekam panggilan video Skype di Linux?

28

Saya ingin melakukan rekaman video wawancara dengan Skype dan saya sedang mencari alat yang dapat diandalkan untuk mencapai itu.

Apakah ada sesuatu di luar sana yang tidak lambat atau bermasalah?

Saya menjalankan (K) Ubuntu.

curiousguy
sumber
Sudahkah Anda mencoba gtk-recordmydesktop? saya dapat merekam hampir semua hal dengan itu. ffmpeg -i x11grab juga berfungsi. jika Anda mengalami masalah dalam mendapatkan audio alsa-loop bekerja.
RobotHumans
Coba tanyakan di askubuntu.com .
Adam Byrtek

Jawaban:

11

Ada piranti lunak recordMyDesktop http://recordmydesktop.sourceforge.net/about.php yang dapat Anda rekam bagian mana pun dari layar yang Anda inginkan. Saya menggunakannya untuk merekam sesi skype saya.

sudo apt-get install recordmydesktop

untuk menginstalnya dari saluran utama.

Chris-Top
sumber
Saya sudah menggunakannya saat memakai headset dan itu akan merekam audio dari pihak lain. Saya kira itu merekam audio dari mikrofon default (jadi itu menangkap suara saya sendiri tetapi bukan milik pihak lain). Adakah cara untuk memperbaikinya?
Marcus Junius Brutus
11

Perintah ini akan menangkap desktop lengkap Anda: Jadi gunakan perintah ini, kapan pun Anda ingin merekam percakapan skype (atau apa pun)

ffmpeg -f x11grab -s wxga -r 25 -i :0.0 -sameq /tmp/out.mpg   
SHW
sumber
1
Terima kasih! Bagaimana saya bisa merekam hanya jendela spesifik misalnya jendela webcam saya dan jendela orang lain? Mungkin bahkan cara merekamnya secara terpisah untuk membuatnya lebih mudah diedit.
curiousguy
1
@curiousguy, untuk merekam jendela tertentu dengan recordmydesktop, gunakan "xwininfo" untuk mendapatkan id window, kemudian dengan recordmydesktop gunakan parameter "--windowid". Jika Anda ingin skala jendela Anda ke ukuran tertentu (dalam piksel) ada berbagai cara untuk melakukannya - Saya percaya Compiz memiliki ini sebagai opsi, juga Openbox akan memberi tahu Anda dimensi jendela. (Saya menggunakan Fedora.) Saya juga percaya Openbox akan memberi Anda "undecorate" jendela, yang membantu jika recordmydesktop merekam batas jendela Anda. Namun, saya tidak yakin apakah ini mungkin dengan ffmpeg?
PJ Brunet
Bagaimana cara kompilasi dengan x11grab diaktifkan di bawah ubuntu? Paket apa yang dibutuhkan?
v010dya
8

Latar Belakang

Merekam video langsung dan audio selama panggilan (atau selama aktivitas desktop X11) tidak terlalu sulit berkat ffmpeg dan jumlah artikel bantuan yang tersedia (termasuk situs ini). Namun, jika Anda bertujuan untuk kualitas yang lebih tinggi, Anda akan dengan cepat mencapai batas-batas pendekatan sederhana dari penyitaan dan pemampatan media secara bersamaan. Oleh karena itu kebutuhan akan alat (atau seperangkat alat) yang akan memungkinkan untuk:

  1. Rekam panggilan tanpa kompresi ke file untuk diproses lebih lanjut, mengakui bahwa ketika memanggil telepon kami hanya tertarik pada audio.
  2. Kompres panggilan yang direkam dengan kualitas tinggi di lain waktu.

Skrip Bash berikut ( myrec, myrec-novideodan myproc) adalah upaya saya untuk tugas ini. Saya yakin ada cara yang lebih rapi untuk menulis skrip ini, tapi saya sedang belajar skrip Bash saat bepergian (dengan kepuasan luar biasa begitu saya berhasil, saya bisa menambahkan).

Prasyarat

  1. ffmpeg
  2. pulseaudio
  3. skype

Jika 1atau 2tidak ada di sistem Anda, instal dengan manajer paket pilihan Anda (saya menggunakan synaptic). Untuk skypemengunjungi www.skype.com .


Rekam video lossless dan audio lossless - myrec

  1. Buat file teks
  2. Simpan sebagai myrec(atau nama apa pun yang cocok untuk Anda)
  3. Jadikan myrecdieksekusi dengan mengeluarkan perintah:chmod +x myrec
  4. Rekatkan kode berikut ke dalamnya dan modifikasi User settingsbagian yang sesuai dengan pengaturan Anda:

#!/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

Hanya merekam audio yang ditangani oleh skrip terpisah di bagian berikut.


Rekam saja audio tanpa kehilangan - myrec-novideo

  1. Buat file teks
  2. Simpan sebagai myrec-novideo(atau nama apa pun yang cocok untuk Anda)
  3. Jadikan myrec-novideodieksekusi dengan mengeluarkan perintah:chmod +x myrec-novideo
  4. Rekatkan kode berikut ke dalamnya dan modifikasi User settingsbagian yang sesuai dengan pengaturan Anda:

#!/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


Memproses file yang direkam - myproc

  1. Buat file teks
  2. Simpan sebagai myproc(atau nama apa pun yang cocok untuk Anda)
  3. Jadikan myprocdieksekusi dengan mengeluarkan perintah:chmod +x myproc
  4. Rekatkan kode berikut ke dalamnya dan modifikasi User settingsbagian yang sesuai dengan pengaturan Anda:


#!/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


Berkat ffmpegfleksibilitasnya, myprocdapat memproses file yang mungkin atau mungkin tidak mengandung aliran video.


Cara menggunakan skrip

  1. Putuskan di mana jendela panggilan video Skype akan berada di layar Anda dan atur ukuran jendela ke dimensi yang diinginkan. Skype akan mengingat pengaturan jendela ini, jadi Anda hanya perlu melakukannya sekali. Pada setiap panggilan berikutnya, jendela akan muncul di tempat yang sama dengan ukuran yang sama. Ingatlah untuk memberi tahu myrecpengaturan Anda. Secara umum, cobalah untuk memiliki jendela panggilan video di suatu tempat dekat webcam Anda, sehingga orang di sisi lain memiliki kesempatan untuk berpikir bahwa Anda sedang menatap mata mereka.
  2. Buka jendela terminal. Kapan pun Anda ingin mulai merekam, gunakan perintah:

    • untuk merekam audio dan video: . myrec some description
    • untuk merekam audio saja: . myrec-novideo some description

    some descriptionopsional di kedua skrip. Anda dapat menggunakan Tabtombol untuk memperluas nama skrip untuk menyimpan beberapa pengetikan. ffmpegakan mulai merekam ke file bernama temp_YYYYMMDD_HHMMSS_some_description.mkv, di mana YYYYMMDD_HHMMSStanggal dan waktu rekaman.

  3. Tekan qdi jendela terminal tempat ffmpegperekaman setelah Anda siap untuk berhenti.
  4. Jalankan . myprocuntuk memproses (kompres) file. Anda dapat melakukannya secara manual, atau mengatur cronpekerjaan untuk melakukannya saat Anda pergi.
  5. Setelah Anda memverifikasi bahwa kompresi berjalan seperti yang diharapkan, hapus temp_file.


Masalah

  1. Tidak dapat menentukan mikrofon dengan nama, hanya dapat menggunakan nilai khusus default. Saya dulu memiliki nama mic di sana, tetapi pengaturan ini berhenti berfungsi setelah pembaruan sistem. Itu bisa saja sesuatu yang terbatas pada pengaturan saya saja, atau untuk pulseaudio.
  2. Audio mik berisi suara saya dan suara dari speaker. Suara dari speaker sedikit di belakang aliran audio yang direkam langsung dari kartu suara. PulseModul pembatalan gema dimuat, tetapi saya pikir itu hanya dimaksudkan untuk membatalkan gema suara saya sendiri. Masalahnya adalah ketika audio mic dicampur dengan audio kartu suara, sedikit keterlambatan membuat aliran yang dihasilkan sulit untuk didengarkan. Adakah yang tahu bagaimana mencegah mic dari merekam suara dari speaker?


Catatan akhir

Saya harap Anda menemukan alat-alat ini bermanfaat. Saya menantikan pendapat Anda untuk perbaikan dan komentar.

Xavras Wyzryn
sumber
2
Wow. Anda mungkin ingin memulai akun git jika Anda belum memilikinya dan juga menyimpan skrip ini di sana.
RobertL
Xavras yang terhormat, saya memperbaiki semua pengaturan pengguna dan saya mengubah awalan file sementara dan mengecualikan detik dari format file. Setelah menjalankan skrip saya mendapatkan kesalahan "... ~ / Desktop / sky_20160506_12-10h.mkv: Tidak ada file atau direktori" Membuat file di muka atau berjalan karena root tidak membantu. Mengapa ini bisa terjadi?
superAnnoyingUser
Halo @Student, Anda mungkin telah mengatasinya sekarang, tetapi saya menerima pemberitahuan tentang komentar Anda hanya hari ini. Melihat kesalahan yang Anda kutip, saya akan berpikir bahwa tilde (~) tidak bisa diselesaikan ke jalur yang sesuai. Coba berikan path dalam bentuk lengkapnya, seperti / home / student /. Apakah Anda mengalami masalah dalam skrip perekaman atau pemrosesan?
Xavras Wyzryn
4

Studio Open Broadcaster Software (OBS) mengikat semua persyaratan ini ke dalam tampilan depan yang mudah digunakan.

Ini open source, dan lintas platform:

Untuk Ubuntu 15.04 dan yang lebih baru:

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

Untuk distro lain / versi Ubuntu sebelumnya, periksa git wiki

Cleary
sumber
0

xvidcap memungkinkan Anda memilih area dari desktop Anda dan merekamnya. Mulai dengan perintah

xvidcap

temukan video Anda di ./test-0000.mpeg secara default.

Thorsten Staerk
sumber