Como fazer um screencast usando ffmpeg

Para quem não sabe, um screencast é uma gravação digital da saída da tela do computador, às vezes contendo narração de áudio.

En Linux, Existem vários ferramentas fazer transmissão de tela. No entanto, aqueles que preferem fazê-lo consumindo recursos mínimos eles não conseguem parar de ler este artigo.


Usando 2 ferramentas (ffmpeg para capturar a tela e xwininfo para obter as coordenadas e dimensões da janela a ser gravada) consegui fazer screencasts utilizando o mínimo de recursos e obtendo ótimos resultados.

O script para iniciar o screencast

#! / Bin / bash

# Obtenha as coordenadas e o tamanho da janela selecionada
# Isso exclui a decoração da janela.
  não definido xywh
  eval $ (xwininfo -frame |
    sed -n -e "s / ^ + X superior esquerdo absoluto: + ([0-9] +). * / x = 1 / p"
           -e "s / ^ + Y superior esquerdo absoluto: + ([0-9] +). * / y = 1 / p"
           -e "s / ^ + Largura: + ([0-9] +). * / w = 1 / p"
           -e "s / ^ + Altura: + ([0-9] +). * / h = 1 / p")
$ w = $ w + $ w% 2 # que a largura é um múltiplo de 2, caso contrário, ffmpeg reclama
WIN_XY = $ x "," $ y # formato Coordenadas XY
WIN_GEO = $ w "x" $ h # tamanho da janela de formato
#notificar-enviar exibirá uma mensagem indicando o início do screencast.
# execute o ffmpeg com os parâmetros adequados à sua configuração.
notificar-enviar "Iniciando screencast ..." && ffmpeg -f alsa -i hw: 0 -f x11grab -r 25 -s $ WIN_GEO -i: 0.0 + $ WIN_XY -acodec libmp3lame -async 1 -vcodec libx264 -preset ultrafast - crf 0 -threads 0 save.mp4

Você não precisa entender totalmente tudo o que este script faz. Basta seguir os comentários. Porém, é bem possível que você tenha que alterar alguns parâmetros na linha onde o ffmpeg é executado para ajustá-los à configuração de sua máquina.

Arquitetura de áudio

1) Se você usar OSS, substitua -f alsa -i hw: 0 por -f oss -i / dev / dsp

2) Se você usar apenas ALSA, terá que usar os parâmetros que vêm no script (-f alsa -i hw: 0). Para determinar o número após hw: você pode executar aplay -l e escolher o número da placa de som apropriado.

3) Se você usar Pulse Audio (Ubuntu e derivados usam isso), use os parâmetros -f alsa -ac 1 -i pulse.

FPS

-r 25 indica os fps (quadros por segundo ou quadros por segundo) em que você deseja gravar. 25 é uma boa opção.

Codec de áudio, vídeo e sincronização

-acodec libmp3lame é o codec de áudio. Optei por gravar em mp3. Você pode usar qualquer outro.

-async 1 permite a sincronização de áudio com vídeo.

-vcodec libx264 -preset ultrafast -crf 0 -threads 0, diz ao ffmpeg que o codec de vídeo a ser usado é x264 e que a predefinição é ultra-rápida (há rápido, lento, etc), caso contrário, não gravará corretamente na quantidade desejada de fps. O parâmetro -crf 0 indica o nível de compressão (quanto menor a compressão, menor a compressão). Finalmente, threads 0 indica o número de threads a serem usados, ao passar 0 ffmpeg calcula automaticamente. Tal como acontece com as configurações de áudio, você pode escolher outras opções.

Todas essas configurações foram as que me deram os melhores resultados: um arquivo relativamente pequeno, uma boa qualidade de vídeo, com áudio sincronizado e sem atrasos. No entanto, recomendo que você mergulhe na documentação do ffmpeg para descobrir outros.

O script para terminar o screencast

#! / Bin / bash
notificar-enviar "Finalizando screencast ..." && killall ffmpeg
Para que ambos os scripts funcionem, você deve ter notificar-enviar instalado. Todas as distribuições derivadas do Ubuntu devem vir com esta ferramenta instalada. Em Arch e derivados: sudo pacman -S libnotify.

ffcast

Procurando informações para escrever os scripts, descobri que alguém teve uma ideia muito semelhante à minha. Ffcast é um script que usa as mesmas ferramentas (ffmpeg e xwininfo). Menciono isso porque alguns podem achar mais conveniente usar este script.

No Arch e derivados, abri um terminal e executei:

yaourt -S ffcast

O resto você pode baixar em clique aqui.

Para terminar…

Depois de criar e salvar os scripts salvos em sua pasta HOME, você deve conceder a eles permissões de execução. Supondo que start_screencast e finish_screencast sejam chamados, execute os seguintes comandos em um terminal:

chmod + x start_screencast
chmox + x terminate_screencast

Por fim, resta apenas atribuir a cada um dos scripts 2 atalhos (atalhos) que sejam confortáveis ​​para você. Dessa forma, os scripts serão executados quando você pressionar a combinação de teclas selecionada.


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.

  1.   Michael Sp. dito

    Desde que comecei a conhecer o Linux, tenho me perguntado exatamente a mesma coisa que acaba de ser detalhada neste comentário. seria um projeto ambicioso.

  2.   pmf dito

    O tutorial parece bom para mim, mas como dizer algo fácil para usuários novatos? Bem, o que me parece melhor é o KAzam, é fácil de usar e não consome muito na minha opinião !!!! Felicidades

  3.   Vamos usar Linux dito

    Não todos. Além disso, sinceramente acredito que não existe uma boa interface para screencasting (que tenha tudo o que preciso), que funcione nos formatos que desejo e que consuma poucos recursos.

    No meu caso, o terminal é a melhor opção. Não finjo que seja para todos, mas é bom compartilhar o que se está aprendendo, certo?

    Felicidades! Paulo.

  4.   Jorge Rocha dito

    É errado que se queremos expandir o sistema operacional sob GNU / linux aconselhamos os usuários a fazer esse tipo de coisa no terminal, as pessoas querem algo fácil e funcional

    @ingjorgerocha

  5.   porquesoyjuan dito

    Ao nível do servidor também utilizo apenas consola, nenhum ambiente gráfico ... é o mais prático e faço tudo a partir daí (automatizo backups por exemplo como tu bem dizes ...), mas, numa máquina que tens como um servidor ... para o que você deseja fazer um screencast nele? hehe..ffmpeg é muito, muito válido, mas acho que o problema do console deve ficar em segundo plano dependendo de quais distribuições.
    Já que temos uma variedade de distros no mundo Linux, e o console é aperfeiçoado o suficiente para funcionar corretamente em todas as situações (é quase infalível ...), devemos começar a melhorar os aplicativos para o público, começar a polir, codificar e aspecto gráfico ... que é o que se exige hoje.
    Temos projetos Linux bastante arcaicos e abandonados, todos sabemos que ... um bom exemplo, para mim, é porque não existe mais um formato de arquivo executável que permite pegar um programa em um pendrive e simplesmente clicar duas vezes e um simples instalação além de requerer repositórios (e portanto rede) .. sem APTonCD, este também está desatualizado .. precisamos de um padrão, um ".tux" ou algo semelhante a um ".exe" do Windows. É uma questão de espaço? .. no Windows, o executável do Gimp ocupa 72mb e o mesmo do Linux (.deb) ocupa 4,2mb ... por que isso? Pois bem, porque o próprio programa Gimp, no Windows vem acompanhado de todas as bibliotecas para garantir que o programa funciona quando instalado ... no Linux poderíamos ter algo igual, o executável ocuparia mais, perderíamos a vantagem de tamanho mas ganhamos em portabilidade (e mais com as memórias tão grandes que carregamos hoje em nossos bolsos ... que diferença faz carregar 4mb do que 72mb se quase todos nós carregamos pendrives de 8gb?)
    Tudo isso tem que ser polido ... o sistema é estável, tem ótimo suporte e compatibilidade de drivers ... por que não melhoramos o que existe? ... se alguém se anima, iniciamos o projeto executável hehe.!

  6.   esconder dito

    Uhm ... bem, as pessoas que amam o console não amam porque querido amigo, eles amam porque com ele muitas coisas podem ser automatizadas, por exemplo, no nível do servidor (embora não seja o caso).

  7.   porquesoyjuan dito

    Honestamente, o console é muito útil ... mas existem programas com alguma GUI que usam o ffmpeg e são mais atraentes e construtivos para possíveis novos usuários Linux ... Eu recomendo o RecordMyDescktop que está nos repositórios de quase todas as distros. Eu sei tem muita gente que ama o console, mas isso deve ser concluído com o máximo possível ... O Linux deve estar focado no desktop e em um possível usuário final que fundamentalmente deseja isso, uma interface gráfica e se possível bonita e prática .. .é tão difícil? que não podemos deixar-nos ser pisados ​​... O Linux tem um potencial tremendo e devemos espremê-lo!
    Apesar de tudo, é um ótimo programa! Boa postagem ^^

  8.   porquesoyjuan dito

    A verdade é, sim, é ótimo compartilhar o que se está aprendendo ... Esta não é uma crítica no sentido desvalorizador do post, mas uma crítica de porque mais pessoas não usam Linux ... diga-se de passagem, o o console deve ser reduzido a um segundo plano para dar lugar às facilidades gráficas (isso não significa que a possibilidade de fazer coisas pelo console esteja descartada, mas que quem quiser usar e quem não quiser, bem, não ..)
    No fim das contas, o que vende, o que chama a atenção é a facilidade de operar um SO ... O Linux é internamente imparável, mas se somarmos a isso a facilidade de uso e as interfaces intuitivas ... ganhamos usuários e isso se beneficia o desenvolvimento da comunidade, os diferentes programas, o suporte de empresas de videogames e portanto hardware específico (digamos placas gráficas ...), a criação de softwares especializados que atualmente só existem em Windows / Mac ... Não sei, eu acho que isso está no plano de 15M ... tudo muito bom, mas agora é hora de mudar um pouco de curso ... e eu falo um pouco!

    Bem, o projeto executável padrão no Linux ainda está de pé, se alguém lê e quer que comecemos a colaborar, aqui está meu e-mail, não estou escondendo hehe (whysoyjuan@gmail.com)

    Saudações e espero ver mais comentários aqui ... sejam críticas ou elogios, o fato é que temos que conversar.Xao

  9.   Vamos usar Linux dito

    Boa! Boa contribuição.
    Abraço! Paulo.

  10.   Gerardo dito

    Sobre o que é este programa ... cuidado, não tenho muito conhecimento sobre isso!

    1.    vamos usar linux dito

      Geralmente, é usado para converter vídeos. Neste caso, demonstramos como utilizá-lo para gravar sua área de trabalho e fazer um vídeo tutorial, por exemplo.
      Abraço! Paulo.

  11.   tarribalis dito

    Obrigado. Na resolução, por exemplo, 1280X800, o X deve ser capitalizado para que o comando ffmpeg funcione.