FFmpeg: criando dois ou mais arquivos de saída simultaneamente

Publicado por Luís Fernando C. Cavalheiro em 17/06/2016

[ Hits: 4.404 ]

Blog: https://github.com/lcavalheiro/

 


FFmpeg: criando dois ou mais arquivos de saída simultaneamente



Pessoas e meninos do computador do Viva o Linux, aqui começa mais uma Dica do Dino® trazendo para todos vocês informações fresquinhas sobre as novidades da semana passada. Na esteira de minha dica sobre como fazer screencast usando o FFmpeg, eu trago um novo truque maneiro: como usar as mesmas entradas de mídia para gerar dois ou mais arquivos simultaneamente. Imagine, por exemplo, que você tem um vídeo em formato .mkv e quer ao mesmo tempo convertê-lo para o formato .mp4 e gravar apenas o áudio dele no formato .mp3. Com o FFmpeg você pode fazer isso tudo com um único comando! Gostou? Então vamos aprender como fazer?

Imagine, por exemplo, que eu quero fazer o screencast do meu desktop, como ensinado na Dica do Dino® anterior, mas ao mesmo tempo eu quero gerar um arquivo .mp4, um arquivo .mkv e um arquivo .mp3. Vamos a um exemplo:

ffmpeg \
-f x11grab -video_size 1366x768 -framerate 60 -i :0.0 \
-f pulse -ac 1 -i alsa_output.pci-0000_00_14.2.analog-stereo.monitor \
-f pulse -ac 1 -i alsa_input.pci-0000_00_14.2.analog-stereo.echo-cancel \
-filter_complex " \
[1:a][2:a]amix=inputs=2:duration=shortest[a]" -map 0 -map "[a]" \
-vcodec libx264 -tune film -acodec aac -strict experimental -b:v 320k -b:a 192k -pix_fmt yuv420p -shortest -vf scale=640:360 arquivo.mp4 \
-vcodec libx264 -tune film -acodec aac -strict experimental -b:v 0 -b:a 0 -pix_fmt yuv420p -shortest -vf scale=1366:768 arquivo.mkv \
-acodec libmp3lame -qscale:a 0 -vn arquivo.mp3


Todos os parâmetros com exceção do -qscale:a e do -vn não são novidades aqui. O codec de áudio libmp3lame é o codec externo ao FFmpeg para criar arquivos .mp3 (lembrem-se que o FFmpeg não tem nenhum codec interno para lidar com .mp3), o -qscale:a determina a qualidade da codificação (para entender como usar o qscale com um arquivo .mp3, leia a documentação pertinente do FFmpeg, e o -vn diz para não incluir vídeo no arquivo final.

Como vocês podem ver, para criar mais de um arquivo de saída simultaneamente basta incluir os codecs que esse arquivo irá usar e dar um nome para ele. O FFmpeg vai criar os arquivos simultaneamente, com o efeito colateral de realizar todas as codificações na velocidade do codec mais lento dentre todos os indicados.

Mas Dino®, eu quero gerar mais de um arquivo mas usando para todos a mesma codificação!

Oras, meu amigo, tem como fazer! Observe agora o exemplo:

ffmpeg \
-f x11grab -video_size 1366x768 -framerate 60 -i :0.0 \
-f pulse -ac 1 -i alsa_output.pci-0000_00_14.2.analog-stereo.monitor \
-f pulse -ac 1 -i alsa_input.pci-0000_00_14.2.analog-stereo.echo-cancel \
-filter_complex " \
[1:a][2:a]amix=inputs=2:duration=shortest[a]" -map 0 -map "[a]" \
-vcodec libx264 -tune film -acodec aac -strict experimental -b:v 320k -b:a 192k -pix_fmt yuv420p -shortest -vf scale=640:360 \
-f tee -map 0:v -map 0:a "arquivo.mp4|[f=mpegts]arquivo.mkv"


Ou seja, eu uso o dispositivo tee para permitir ao dispositivo mpegts lidar com duas saídas simultâneas via pipe. E voilá, trabalho feito!

E com essa, termina mais uma Dica do Dino®, desejando para todos vocês noites e mais noites de compilação longa e próspera!

Outras dicas deste autor

Slackpkg: escolha qual programa usar para fazer o download de dados

Alterando o gerenciador de login no openSUSE

Instalando e configurando controle PS-like no Debian Stretch

Fontes da Microsoft no Slackware

Exibindo imagem de usuário no Whisker Menu

Leitura recomendada

CUPS-PDF: erro "cups-pdf failed" [Ubuntu 9.04]

Absorver textos de livros como uma esponja

Instalação do Google Chrome no Debian Squeeze

Como traduzir o Trinity Desktop Environment

Dividindo arquivos grandes restaurando-os com slipt e cat

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts