Как записывать видеозвонки по Skype в Linux?


28

Я хотел бы провести записанные видео-интервью со Skype и ищу надежный инструмент для достижения этой цели.

Есть ли что-нибудь, что не тормозит или не глючит?

Я бегу (K) Ubuntu.


вы пробовали gtk-recordmydesktop? Я могу записать почти все с этим. ffmpeg -i x11grab тоже работает. если у вас возникли проблемы с получением аудио-петли alsa работает
— RobotHumans

Попробуйте спросить на askubuntu.com .
— Адам Быртек

Ответы:


11

Существует программное обеспечение recordMyDesktop http://recordmydesktop.sourceforge.net/about.php, в которое вы можете записывать любую часть экрана, которую хотите. Я использую это, чтобы сделать запись моих сессий скайпа.

sudo apt-get install recordmydesktop

установить его с основных каналов.


Я использовал это, надевая гарнитуру, и она записывала аудио собеседника. Я предполагаю, что это была запись звука от микрофона по умолчанию (таким образом это захватывало мой собственный голос, но не голос другой стороны). Есть идеи, как это исправить?
— Маркус Юний Брут

11

Эта команда захватит ваш полный рабочий стол: используйте эту команду всякий раз, когда вы хотите записать Skype-разговор (или что-нибудь еще)

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

1
Благодарность! Как я могу записать только определенные окна, например окно моей веб-камеры и окно другого человека? Возможно, даже как записать их отдельно, чтобы было легче редактировать.
— любопытный парень

1
@curiousguy, чтобы записать определенное окно с помощью recordmydesktop, используйте «xwininfo» для получения идентификатора окна, затем с помощью recordmydesktop используйте параметр «--windowid». Если вы хотите масштабировать окно до определенного размера (в пикселях), есть разные способы сделать это - я полагаю, что Compiz имеет это в качестве опции, также Openbox сообщит вам размеры окна. (Я использую Fedora.) Также я верю, что Openbox позволит вам «декорировать» окно, что полезно, если recordmydesktop записывает границу вашего окна. Тем не менее, я не уверен, возможно ли это с ffmpeg?
— Пи Джей Брюнет

Как можно компилировать с включенным x11grab под Ubuntu? Какой пакет ему нужен?
— v010дя

8

Задний план

Запись живого видео и аудио во время разговора (или во время любого рабочего стола X11) не очень сложна благодаря ffmpeg и количеству доступных статей справки (включая этот сайт). Однако если вы стремитесь к более высокому качеству, вы быстро достигнете пределов простого подхода одновременного захвата и сжатия носителя. Отсюда необходимость в инструменте (или наборе инструментов), который позволил бы:

  1. Записывайте звонки без сжатия в файл для дальнейшей обработки, признавая, что при звонке на телефон нас интересует только звук.
  2. Сжатие записанных звонков в высоком качестве в более позднее время.

Следующие Bash скрипты ( 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: Нет такого файла или каталога" Создание файла заранее или запуск от имени пользователя root не помогает. Почему это может быть?
— SuperAnnoyingUser

Здравствуйте @Student, возможно, вы уже разобрались, но я получил уведомление о вашем комментарии только сегодня. Глядя на ошибку, которую вы цитировали, я думаю, что тильда (~) не была решена на своем пути. Попробуйте указать путь в его полной форме, например / 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

Для других дистрибутивов / более ранних версий Ubuntu, ознакомьтесь с git wiki


0

xvidcap позволяет вам выбрать область на рабочем столе и записать ее. Запустите его с помощью команды

xvidcap

по умолчанию найдите ваше видео по адресу ./test-0000.mpeg.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.