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

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

[ Hits: 4.614 ]

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

Google Chrome Stable no CentOS 6.x

Habilitando supressão de ruído no PulseAudio

Slackware - Duas formas (de preguiçoso) de usar o SlackBuilds

Ubuntu e derivados não querem atualizar? Resolva na marra!

Gerencie a bateria do seu notebook usando o powertop

Leitura recomendada

Instalando o aMSN 0.97 no Debian em 4 passos

Driver Nvidia no Zenwalk 7.0

Rodando Linux no Nintendo DS com o port dslinux

WMA no XMMS do Debian

Ouvindo Música no Caja

  

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