Como gravar videochamadas do Skype no Linux?


28

Gostaria de realizar entrevistas em vídeo gravadas com o Skype e estou procurando uma ferramenta confiável para fazer isso.

Existe algo lá fora que não seja lento ou com bugs?

Estou executando o (K) Ubuntu.


você já tentou gtk-recordmydesktop? eu posso gravar quase tudo com ele. O ffmpeg -i x11grab também funciona. se você estiver com problemas para fazer o áudio alsa-loop funcionar.
usar o seguinte comando

Respostas:


11

Existe o software recordMyDesktop http://recordmydesktop.sourceforge.net/about.php, no qual você pode gravar qualquer parte da tela que desejar. Eu o uso para gravar minhas sessões de skype.

sudo apt-get install recordmydesktop

para instalá-lo a partir dos canais principais.


Eu usei isso enquanto usava um fone de ouvido e ele gravava o áudio da outra parte. Acho que estava gravando áudio do microfone padrão (por isso estava capturando minha própria voz, mas não a da outra parte). Alguma idéia de como consertar isso?
Marcus Junius Brutus

11

Este comando irá capturar sua área de trabalho completa: Portanto, use este comando sempre que desejar gravar uma conversa no skype (ou qualquer outra coisa)

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

1
Obrigado! Como gravar apenas janelas específicas, por exemplo, a janela da minha webcam e a janela da outra pessoa? Talvez até como gravá-los separadamente para facilitar a edição.
precisa

1
@curiousguy, para gravar uma janela específica com recordmydesktop, use "xwininfo" para obter o ID da janela e, em recordmydesktop, use o parâmetro "--windowid". Se você deseja dimensionar sua janela para um tamanho específico (em pixels), existem diferentes maneiras de fazer isso - acredito que o Compiz tem isso como uma opção, mas o Openbox também informará as dimensões da janela. (Estou usando o Fedora.) Além disso, acredito que o Openbox permitirá que você "decore" uma janela, o que é útil se recordmydesktop estiver gravando sua borda da janela. No entanto, não tenho certeza se isso é possível com o ffmpeg?
PJ Brunet

Como alguém poderia compilar com o x11grab ativado no ubuntu? Qual pacote ele precisa?
precisa saber é o seguinte

8

fundo

Gravar vídeo e áudio ao vivo durante uma chamada (ou durante qualquer atividade da área de trabalho X11) não é muito difícil, graças ao ffmpeg e à quantidade de artigos de ajuda disponíveis (incluindo este site). No entanto, se você busca uma qualidade mais alta, alcançará rapidamente os limites da abordagem simples de captura e compressão simultânea de mídia. Daí a necessidade de uma ferramenta (ou um conjunto de ferramentas) que permita:

  1. Grave chamadas sem compactação em um arquivo para processamento adicional, reconhecendo que ao ligar para um telefone, estamos interessados ​​apenas em áudio.
  2. Comprima as chamadas gravadas em alta qualidade posteriormente.

Os seguintes scripts Bash ( myrec, myrec-novideoe myproc) são minha tentativa para esta tarefa. Tenho certeza de que existem maneiras mais claras de escrever esses scripts, mas eu estava aprendendo os scripts do Bash em movimento (com uma enorme satisfação quando o consegui trabalhar, devo acrescentar).

Pré-requisitos

  1. ffmpeg
  2. pulseaudio
  3. skype

Se 1ou 2não estiver presente no seu sistema, instale-os com o seu gerenciador de pacotes preferido (eu uso synaptic). Para skypevisitar www.skype.com .


Grave vídeo sem perda e áudio sem perda - myrec

  1. Crie um arquivo de texto
  2. Salve-o como myrec(ou qualquer outro nome que funcione para você)
  3. Torne myrecexecutável emitindo o comando:chmod +x myrec
  4. Cole o seguinte código nele e modifique a User settingsseção para se adequar à sua configuração:

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

A gravação de áudio somente é tratada por um script separado na seção a seguir.


Grave apenas áudio sem perdas - myrec-novideo

  1. Crie um arquivo de texto
  2. Salve-o como myrec-novideo(ou qualquer outro nome que funcione para você)
  3. Torne myrec-novideoexecutável emitindo o comando:chmod +x myrec-novideo
  4. Cole o seguinte código nele e modifique a User settingsseção para se adequar à sua configuração:

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


Processe os arquivos gravados - myproc

  1. Crie um arquivo de texto
  2. Salve-o como myproc(ou qualquer outro nome que funcione para você)
  3. Torne myprocexecutável emitindo o comando:chmod +x myproc
  4. Cole o seguinte código nele e modifique a User settingsseção para se adequar à sua configuração:


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


Graças à ffmpegflexibilidade do, myprocpode processar arquivos que podem ou não conter o fluxo de vídeo.


Como usar os scripts

  1. Decida onde a janela de videochamada do Skype estará na tela e defina o tamanho da janela para uma dimensão desejada. O Skype lembrará essa configuração de janela, portanto, você só precisará fazer isso uma vez. A cada chamada subseqüente, a janela aparecerá no mesmo local e no mesmo tamanho. Lembre-se de informar myrecsuas configurações. Em geral, tente ter a janela de videochamada em algum lugar perto da webcam, para que a pessoa do outro lado tenha a chance de pensar que você está olhando nos olhos dela.
  2. Tenha uma janela do terminal aberta. Sempre que você deseja iniciar a gravação, use o comando:

    • para gravar áudio e vídeo: . myrec some description
    • para gravar apenas áudio: . myrec-novideo some description

    some descriptioné opcional nos dois scripts. Você pode usar a Tabtecla para expandir os nomes dos scripts e economizar digitação. ffmpegcomeçará a gravar em um arquivo chamado temp_YYYYMMDD_HHMMSS_some_description.mkv, onde YYYYMMDD_HHMMSSé a data e a hora da gravação.

  3. Pressione qna janela do terminal em que ffmpegestá gravando quando estiver pronto para parar.
  4. Execute . myprocpara processar (compactar) os arquivos. Você pode fazê-lo manualmente ou configurar um crontrabalho para fazê-lo enquanto estiver ausente.
  5. Depois de verificar se a compactação ocorreu conforme o esperado, exclua o temp_arquivo.


Problemas

  1. Não foi possível especificar o microfone pelo nome, só pode usar o valor especial default. Eu costumava ter o nome do microfone lá, mas essa configuração parou de funcionar após uma atualização do sistema. Pode ser algo restrito apenas à minha configuração ou a pulseaudio.
  2. O áudio do microfone contém minha voz e o som dos alto-falantes. O som dos alto-falantes está um pouco atrás do fluxo de áudio gravado diretamente da placa de som. PulseO módulo de cancelamento de eco do carregador está carregado, mas acho que o objetivo é apenas cancelar o meu próprio eco de voz. O fato é que, quando o áudio do microfone é misturado ao da placa de som, o pequeno atraso dificulta a audição do fluxo resultante. Alguém tem uma idéia de como impedir que o microfone grave os sons dos alto-falantes?


Notas finais

Espero que você ache essas ferramentas úteis. Estou ansioso para ouvir seus pensamentos para melhorias e comentários.


2
Uau. Você pode querer iniciar uma conta git se não tiver uma e também manter esses scripts lá.
RobertL

Caros Xavras, Corrigi todas as configurações do usuário e alterei o prefixo do arquivo temporário e excluí os segundos do formato do arquivo. Ao executar o script, recebo o erro "... ~ / Desktop / sky_20160506_12-10h.mkv: Esse arquivo ou diretório não existe" A criação antecipada do arquivo ou a execução como root não ajuda. Por que pode ser isso?
SuperAnnoyingUser

Olá @Estudante, você já deve ter resolvido o problema agora, mas só recebi uma notificação sobre seu comentário hoje. Olhando para o erro que você citou, acho que o til (~) não foi resolvido em seu caminho apropriado. Tente fornecer o caminho em sua forma completa, como / home / student /. Você encontrou o problema no script de gravação ou processamento?
Xavras Wyzryn

4

O Open Broadcaster Software (OBS) Studio vincula todos esses requisitos a um front-end fácil de usar.

É de código aberto e multiplataforma:

Para o Ubuntu 15.04 e posterior:

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

Para outras distribuições / versões anteriores do Ubuntu, consulte o wiki do git


0

O xvidcap permite selecionar uma área da área de trabalho e registrá-la. Inicie com o comando

xvidcap

encontre seu vídeo em ./test-0000.mpeg por padrão.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.