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

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

Есть ли что-то, что не мешает или не работает?

Я бегу (K) Ubuntu.

  • Команда не найдена при запуске функции в bash
  • Как переключиться на Linux (Ubuntu) на Chromebook?
  • имя переменной теряется, когда вкладка завершается, чтобы экспортировать переменную окружения с помощью пути
  • Развлечения с Ubuntu 16.04 и mysql
  • Как установить UNIX На виртуальной машине?
  • Настройка syslogd в Ubuntu
  • потерянная папка из / mnt и восстановление
  • Как затвердеть su с dpkg-statoverride?
  • 5 Solutions collect form web for “Как записывать видеозвонки Skype в Linux?”

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

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

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

     sudo apt-get install recordmydesktop 

    для его установки из основных каналов.

    Задний план

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

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

    Следующие сценарии Bash ( myrec , myrec-novideo и myproc ) – это моя попытка выполнить эту задачу. Я уверен, что есть более аккуратные способы написания этих сценариев, но я изучал сценарии Bash на ходу (с огромным удовлетворением, как только я получил его на работу, я мог бы добавить).

    Предпосылки

    1. ffmpeg
    2. pulseaudio
    3. skype

    Если 1 или 2 нет в вашей системе, установите их с помощью своего предпочтительного менеджера пакетов (я использую synaptic ). Для посещения skype посетите сайт http://www.skype.com .

    Запись без потерь видео и без потерь аудио – myrec

    1. Создание текстового файла
    2. Сохраните его как myrec (или какое-либо имя работает для вас)
    3. Сделайте myrec исполняемым, 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 по #!/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 по #!/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 (ie 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 . myproc обрабатывать (сжимать) файлы. Вы можете либо сделать это вручную, либо настроить задание cron чтобы сделать это, пока вы отсутствуете.
    5. После проверки того, что сжатие прошло как ожидалось, удалите файл temp_ .

    вопросы

    1. Невозможно указать микрофон по имени, можно использовать только специальное значение по default . Раньше у меня было имя микрофона, но этот параметр переставал работать после обновления системы. Это может быть что-то ограниченное только моей настройке или pulseaudio .
    2. Звук микрофона содержит мой голос и звук из динамиков. Звук от динамиков немного отстает от аудиопотока, записанного непосредственно с звуковой карты. Модуль эхоподавления Pulse загружен, но я думаю, что он предназначен только для отмены моего собственного голосового эха. Дело в том, что когда микшированный звук смешивается со звуком звуковой карты, небольшая задержка приводит к тому, что результирующий поток трудно прослушивать. Кто-нибудь есть идея, как предотвратить микрофон от записи звуков из динамиков?

    Итоговые заметки

    Надеюсь, вы найдете эти инструменты полезными. Я с нетерпением жду ваших замечаний по улучшению и комментариям.

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

     xvidcap 

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

    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

    Interesting Posts

    Как вызвать функцию уровня ядра в пользовательском пространстве

    Команда ffmpeg не работает на ec2

    Как определить, какая клавиатура использовалась для нажатия клавиши?

    Как отключить пользовательские tmpfs / run / user / 1000, tmpfs

    Восстановить один файл в каталоге $ HOME

    Используйте существующий wampserver из раздела Windows на linux mint

    переменная curl outfile не работает в скрипте bash

    Почему «systemctl enable rpcbind» меняет громкость моего звука? И как я могу это предотвратить?

    Как сгенерировать много паролей с помощью kpcli?

    RAID1, который можно увеличить при добавлении нового диска: конвертировать в lvm –type raid1?

    Уменьшите размер шрифта в Cinnamon из командной строки

    Установка драйвера принтера HP для Arch Linux

    GRUB: угадайте, какой номер моей операционной системы загружается

    Какой пользователь выполняет команды, определенные в /etc/rc.local?

    Как использовать printf и% s при наличии цветовых кодов?

    Linux и Unix - лучшая ОС в мире.