Meio Bit » Software » Tutorial: FFMPEG – o canivete suíço da manipulação de vídeos

Tutorial: FFMPEG – o canivete suíço da manipulação de vídeos

FFMPEG é a mais poderosa ferramenta para manipulação de vídeo em linha de comando. Venha dominar esse poder!

11 semanas atrás

FFMPEG é um programa em linha de comando - e isso já espantou metade da audiência - que é usado “secretamente” por quase todos os softwares de edição e manipulação de vídeo, mas o grande segredo é que ele pode ser usado diretamente, de forma bem mais rápida e eficiente.

O FFMPEG é mais ou menos isso. (Crédito: Editoria de Arte/Stable Diffusion)

É claro que eu uso meus DaVincis Resolves da vida, e para muito vídeo curto eu ainda uso o venerável Windows Movie Maker, disponível no Internet Archive, mas há muita coisa que eu acabo automatizando com o FFMPEG. Mas... o que dá pra fazer com ele?

A documentação do FFMPEG é imensa, daria para escrever um testamento com todos os comandos, mas seria muita canalhice até para mim jogar tudo no ChatGPT, pedir pra ele reescrever e postar aqui. Vamos então a uma série de casos e usos, e no final o caminho das pedras para quem quiser instalar o bicho.

O que é um FFMPEG?

Ele é um software altamente otimizado, com apenas 127MB de tamanho, que reconhece centenas de CODECS de vídeo, e é capaz de todo tipo de manipulação de dados, de gerar histogramas a converter entre todos os formatos. Ele faz upscaling, converte DVDs, muda aspect ratio, faz estabilização de imagens, insere legendas e incluir/remover watermarks. Ah sim, também dá pra criar gifs e PNGs animados. (sim, existe PNG animado)

1 – Converter entre formatos

Esse é o feijão com arroz do FFMPEG, e nem vale o artigo. Abrindo um prompt de comando, vá para o diretório onde está o arquivo que você quer converter, teste.avi por exemplo.

O comando é:

ffmpeg -i teste.avi saída.mp4

A beleza é que ele faz tudo sozinho, identificando o formato de entrada, e deduzindo o de saída de acordo com a extensão. Áudio também é tratado de forma transparente.

A principal vantagem aqui é que o FFMPEG tem zero peso morto, não tem GUI em Visual Basic para rastrear IPs, não tem vários processos rodando em background. No momento em que você apertar <enter>, ele começa a torar sua CPU, usando todos os núcleos e threads que conseguir se apossar.

2 – Criando Colorbar

Você sabe, aquele vídeo com padrão de cores e um tom de 1KHz, usado para calibrar seu sistema, antes do vídeo principal começar. Ninguém precisa abrir o Premiere só para gerar um vídeo de colorbar, basta usar o comando:

fmpeg -f lavfi -i "smptebars=size=1920x1080:rate=30" -f lavfi -i "sine=frequency=1000:sample_rate=48000"  -t 10  saida.mp4

Você sabe, piiiiii (Crédito: Editoria de Arte)


Ele irá gerar um vídeo com resolução de 1920x1080, 30 frames por segundo, com 10 segundos de duração.

3 – Legendando Vídeos

Nós já aprendemos com o Whisper como transcrever e traduzir um áudio para um arquivo de texto, diretamente no formato .srt usado pela maioria dos programas. Softwares como o VLC conseguem ler diretamente os arquivos e exibi-los corretamente, mas seria mais conveniente ter tudo em um arquivo só. Felizmente containers como MP4 permitem que você tenha legendas incorporadas ao arquivo principal.

Peguemos o clássico discurso de John Kennedy anunciando o Programa Apollo.

Com o Whisper, geramos o arquivo de legendas em português e salvamos como Kennedy.srt.

Colocando os dois arquivos no mesmo diretório, na linha de comando comandamos:

ffmpeg -i kennedy.mp4 -i kennedy.srt -c copy -c:s mov_text -metadata:s:s:0 language=por kennedy_leg.mp4

E pronto, nosso vídeo kennedy_leg.mp4 agora tem legendas selecionáveis por software.

Se você quiser forçar as legendas para que elas sejam “queimadas” no vídeo, pode usar o comando:

ffmpeg -i kennedy.mp4 -vf "subtitles=kennedy.srt" -c:a copy -c:v h264 -metadata:s:s:0 language=por kennedy_leg_hard.mp4

Note que essa modalidade é bem mais lenda, pois o vídeo precisa ser reencodado.

Ah sim, você também pode usar o FFMPEG para extrair legendas, caso queira usá-las como base para uma transcrição, ou para corrigir algo. O comando é:

ffmpeg -i video.mp4 -map 0:s:0 output_legenda.srt

Legendas, legendas a rodo. (Crédito: Editoria de Arte)

Alguns vídeos possuem várias legendas disponíveis, como este episódio de Rick and Morty. Aqui o FFMPEG não pode te ajudar, ele não sabe extrair todas de uma vez. Você precisa contar a posição, começando do zero. As legendas em português brasileiro são a 16ª da lista, então o comando é...

ffmpeg -i rick.mp4 -map 0:s:15 output_subtitle.srt

4 – Extraindo frames

Algumas vezes você precisa de uma seqüência de frames de um vídeo. Pode ser para criar um gif animado, selecionar uma imagem específica que aparece muito rapidamente, ou para processamento avançado, como alteração por IA, upscaling ou restauração.

Aqui temos um problema, a maioria dos formatos de vídeo modernos não trabalha exatamente com frames, eles comprimem os dados e guardam as alterações entre os keyframes, b-frames e outros frames que não temos tempo para detalhar. O FFMPEG pode ser comandado para reconverter isso tudo e extrair a maior quantidade de frames possível de um vídeo, e é simples.

Primeiro, crie uma subpasta chamada frames, no diretório onde estamos trabalhando. Feito isso, basta o comando:

ffmpeg -i kennedy.mp4 -q:v 1 -qmin 1 -qmax 1 frames/out%4d.jpg

 

a porção out%4d.jpg diz ao FFMPEG para criar arquivos em formato JPEG (.png também é aceito) no formato outXXXX.jpg, onde XXXX é a numeração do frame, começando em 0000. Vídeos com mais de 10000 frames, é recomendado usar %5d ou mesmo %6d, para tudo ficar organizado.

5 – Criando vídeos usando frames

É o caminho inverso. Digamos que você tenha tratado os frames do vídeo original, e agora queira juntar todos os frames em um novo vídeo. O comando é:

ffmpeg -framerate 29.97 -i frames/out%04d.jpg novovideo.mp4

Aqui estamos assumindo que a taxa original era de 29.97 quadros por segundo, claro.

“Ah mas e o áudio?”

Excelente pergunta, gafanhoto. Você pode extrair o áudio do arquivo original com o comando:

ffmpeg -i kennedy.mp4 -vn -acodec libmp3lame -q:a 4 kennedy_audio.mp3

Para reincorporar (ehê!) o áudio ao novo vídeo, durante sua criação, o comando é

ffmpeg -framerate 29.97 -i frames/out%04d.jpg -i kennedy_audio.mp3 kenconp.mp4

 

6 – Detectando cenas

Existem ferramentas mais complexas e dedicadas, como o PySceneDetect, mas às vezes você precisa de um método rápido de analisar um vídeo, detectar as cenas individuais e criar um mosaico com elas, para ter uma visão geral do arquivo como um todo.

Seus problemas acabaram! O FFMPEG também faz isso!

Esvazie o nosso diretório “frames”.  Agora no diretório acima, abra a linha de comando e...

ffmpeg -i rick.mp4 -vf "select='gt(scene,0.75)'" -vsync vfr frames/frame%4d.jpg

Estamos comandando o FFMPEG para analisar o arquivo rick.mp4 em busca de mudanças de cenas. Se um frame for substancialmente diferente do anterior, ele o grava no diretório frames, com numeração sequencial.

A diferenciação é sempre a parte complicada, cada vídeo tem um fator ideal diferente. Os valores aqui variam entre 0 e 1, onde 0 significa que a mais ínfima diferença é suficiente para o frame ser gravado. Valores mais altos fazem com que os frames precisem ser mais distintos para disparar o processo. 0.6 é um bom valor inicial.

 

7 – Criando Mosaicos

Obviamente fica muito mais fácil se todas as imagens estão em um único arquivo. Tecnicamente o FFMPEG não é um processador de imagens estáticas, mas como ele faz basicamente tudo...

Precisamos apenas dar o comando:

ffmpeg -framerate 30 -i frames/frame%4d.jpg -filter_complex "[0:v]scale=min(400\,iw*5/10):-1,tile=5x16" mosaico.jpg

Ele irá ler os arquivos no diretório frames, e montar um mosaico com 5 imagens na horizontal e 16 na vertical, de nome mosaico.jpg.

O mosaico gerado. (Crédito: Editoria de Arte)

Normalmente esses arquivos ficam bem grandes rapidamente, ainda mais se você estiver mosaicando um vídeo em 4K.  Por isso o comando scale permite que a gente determine a largura das imagens individuais. No caso, eu escolhi 400 pixels. Com 76 frames, isso resultou em um arquivo de 2000 x 3600 pixels:

O comando tile determina as dimensões do mosaico. É importante que você dimensione corretamente, para não deixar imagens de fora. A fórmula complexa é L = n/5, onde n é o número de frames e 5 é o número de colunas. Calcule e obtenha o número de linhas. No caso usei 16.

8 – Adicionando logos

Já dizia o filósofo Abelardo Barbosa: Na internet nada se perde, nada se cria, tudo se copia. Sites copiando sites, vídeos descaradamente roubados... o mínimo que podemos fazer é assinar nossos vídeos. E com o FFMPEG isso é bem simples.

Digamos que você tem uma logo do seu site, assim:

Você quer adicioná-la no canto inferior direito do vídeo, redimensionando automaticamente para ocupar 25% da largura. E com uns 30% de opacidade. (ou 70% de transparência, dá no mesmo). O comando é:

ffmpeg -i kennedy.mp4 -i watermark.png -filter_complex "[1:v]boxblur=5:1,scale=iw*0.30:-1,format=argb,colorchannelmixer=aa=0.3[logo];[0:v][logo]overlay=W-w-10:H-h-10[out]" -map "[out]" -map 0:a -c:a copy saida.mp4

No caso o arquivo kennedy.mp4 será convertido para saída.mp4, com adição da logo watermark.png, dimensionada em 30% (comando scale=iw*0.30) e com opacidade (aa=0.3) de 30% também.

9 – Criando gifs animados

GIF animado é uma abominação, um resquício dos primórdios da Internet, que infelizmente todo mundo usa, já que achamos banda no lixo, provavelmente. Então, se quiser criar um gif animado, com o FFMPEG é extremamente simples, só lembre-se que é um formato muito ineficiente, os arquivos ficam gigantescos.

Um truque é reduzir (muito) a framerate, e o tamanho. Então, o comando:

ffmpeg -i input.mp4 -vf "fps=6, scale=-1:500,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" -loop 0 output.gif

vai converter os primeiros 10 segundos do vídeo input.mp4 em um gif animado de nome output.gif. A framerate, -fps é de 6 quadros por segundo, e a escala reduz proporcionalmente o vídeo para 500 pixels de altura. Eis o resultado:

OK, eu trapaceei. O arquivo resultante tinha mais de 4MB, o comando usado cria GIFs com qualidade máxima. Para obter GIFs com qualidade (e tamanho) bem inferior, use:

ffmpeg -i input.mp4 -ss 0 -t 10 -vf "scale=-1:500" -r 6 output.gif

O GIF acima foi otimizado via GifSicle, um pequeno utilitário que faz mágica, tipo uma Fiorino com escada.

10 – Efeito Jornal Nacional de vídeo vertical

Infelizmente o povão adora vídeo vertical, aí fica desesperado movendo o celular pros lados, tentando enquadrar algo que se encaixaria de forma perfeitamente confortável em um vídeo horizontal, mas como não tem jeito, muito programa de TV escolheu uma técnica onde o vídeo vertical é mostrado no centro da tela, e para não ficar com colunas laterais pretas, exibem uma versão borrada do vídeo nas laterais.

Esse efeito é trivial com o FFMPEG:

ffmpeg -i vertical.mp4  -vf split[original][copy];[copy]scale=ih*16/9:-1,crop=h=iw*9/16,gblur=sigma=20[blurred];[blurred][original]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2 output_hor.mp4

Ele cria um vídeo output_hor.mp4 em proporção 16:9, usando como base o vídeo vertical.mp4. Simples assim. Eis o resultado:

11 – Converter vídeo horizontal para formato vertical

Eu não vou ensinar isso.

FFMPEG – Como instalar

Passo 1:

O site oficial é ffmpeg.org. Na área de downloads, você vai achar executáveis para Linux, Mac e Windows. Para Windows há dois links principais. Eu sugiro que você vá no do BtBN, que levará até esta página do GitHub, onde você poderá baixar o arquivo ffmpeg-master-latest-win64-gpl.zip.

Passo 2:

Crie uma pasta chamada FFMPEG na raiz do disco C:\

Passo 3:

Abra o zip, você vai achar as pastas bin e doc. Copie ambas para a pasta c:\FFMPEG.

Passo 4:

Clique na área de pesquisa na barra de tarefas do Windows, digite Powershell. Ele abrirá uma janela parecida com esta. Clique na opção “Executar como Administrador”.

Opção devidamente sinalizada (Crédito: Editoria de Arte)

Passo 5:

Na janela da PowerShell, digite o comando:

setx PATH "%PATH%;C:\ffmpeg\bin" <enter>

Passo 6:

Feche a janela, abra uma janela do DOS comum e digite:

ffmpeg -version

Se tudo der certo você verá uma tela assim e o FFMPEG estará devidamente instalado em seu sistema.

FFMPEG instalado corretamente. (Crédito: MeioBit)

Conclusão

Nem chegamos a arranhar as possibilidades do FFMPEG, as chances são que se você conseguir imaginar, ele consegue fazer, em se tratando de vídeo. Uma busca no Google, leitura da documentação ou até uma leve trapaça, perguntando ao ChatGPT se algo é possível, e você estará automatizando seus processos quase como mágica.

E sim, o FFMPEG tem integração com quase toda linguagem que você imaginar, mas um bom e velho bash ou batch já resolvem a maioria das necessidades.

 

Leia mais sobre: , , .

relacionados


Comentários