Як записувати відеодзвінки Skype в Linux?


28

Я хотів би провести записані відеоінтерв'ю зі Skype і шукаю надійний інструмент для цього.

Чи є щось там, що не повільно чи баггі?

Я запускаю (K) Ubuntu.


ви пробували gtk-recordmydesktop? я можу записати з ним більшість всього. ffmpeg -i x11grab теж працює. якщо у вас виникають проблеми з тим, щоб звуковий альса-цикл працював.
RobotHumans

Спробуйте запитати на сайті askubuntu.com .
Адам Біртек

Відповіді:


11

Існує програмне забезпечення RecordMyDesktop http://recordmydesktop.sourceforge.net/about.php, яке ви можете записати будь-яку частину екрана, яку ви хочете. Я використовую його для запису моїх сеансів по скайпу.

sudo apt-get install recordmydesktop

щоб встановити його з основних каналів.


Я використовував це під час носіння гарнітури, і він записуватиме звук іншої сторони. Я здогадуюсь, що він записував аудіо з мікрофона за замовчуванням (тому він захоплював мій власний голос, але не той, що стосується іншої сторони). Будь-яка ідея, як це виправити?
Маркус Юній Брут

11

Ця команда охопить ваш повний робочий стіл. Тому використовуйте цю команду, коли ви хочете записувати розмову по скайпу (або що-небудь ще)

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

1
Спасибі! Як я можу записувати лише конкретні вікна, наприклад, вікно моєї веб-камери та вікно іншої людини? Можливо, навіть як записати їх окремо, щоб полегшити їх редагування.
curiousguy

1
@curiousguy, щоб записати певне вікно з recordmydesktop, використовуйте "xwininfo", щоб отримати ідентифікатор вікна, а потім із записомmydesktop використовуйте параметр "--windowid". Якщо ви хочете масштабувати вікно до певного розміру (у пікселях), це є різні способи - я вважаю, що Compiz має це як варіант, також Openbox підкаже вам розміри вікна. (Я використовую Fedora.) Також я вважаю, що Openbox дозволить вам "підкреслити" вікно, що може бути корисно, якщо recordmydesktop записує межу вашого вікна. Однак я не впевнений, чи можливо це за допомогою ffmpeg?
PJ Brunet

Як одна компіляція з x11grab включена під ubuntu? Який пакет потрібен?
v010дя

8

Фон

Запис відео та аудіо в прямому ефірі під час дзвінка (або під час будь-якої роботи на робочому столі X11) не є дуже складним завдяки ffmpeg та кількості доступних статей довідки (включаючи цей сайт). Однак якщо ви орієнтуєтесь на більш високу якість, ви швидко досягнете меж простого підходу одночасного захоплення та стискання носія. Звідси потреба у інструменті (або наборі інструментів), який би дав змогу:

  1. Запис дзвінків без стиснення у файл для подальшої обробки, визнаючи, що при дзвінку на телефон нас цікавить лише аудіо.
  2. Пізніше стисніть записані дзвінки високої якості.

Наступні Bash скрипти ( myrec, myrec-novideoі myproc) моя спроба вирішення цього завдання. Я впевнений, що існують більш акуратні способи написання цих сценаріїв, але я вивчав сценарії Баша на ходу (з величезним задоволенням, як тільки я змусив його працювати, я можу додати).

Передумови

  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: Немає такого файлу чи каталогу" Створення файлу заздалегідь або запуску, оскільки root не допомагає. Чому це може бути?
superAnonoyingUser

Привіт @Student, ви, можливо, відредагували це, але я отримав сповіщення про ваш коментар лише сьогодні. Дивлячись на цитовану вами помилку, я б подумав, що тильда (~) не вирішилась у відповідний шлях. Спробуйте надати шлях у повному вигляді, наприклад, / home / student /. Ви зіткнулися з проблемою в сценарії запису чи обробки?
Xavras Wyzryn

4

Відкрите програмне забезпечення для телерадіомовлення (OBS) Studio пов'язує всі ці вимоги із зручним інтерфейсом.

Це відкритий код і кросова платформа:

Для Ubuntu 15.04 та новіших версій:

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

Для інших дистрибутивів / попередніх версій Ubuntu перегляньте вікі git


0

xvidcap дозволяє вибрати область зі свого робочого столу та записати її. Почніть його з команди

xvidcap

знайдіть своє відео за замовчуванням ./test-0000.mpeg.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.