beija-flor

Como estabilizar vídeo com o ffmpeg

Estabilização de imagens em vídeo pode ser feita de diversas formas, com diferentes métodos. Às vezes é possível combinar os métodos e estabilização, para obter resultados ainda melhores.
Se for para usar apenas um, o melhor método é aquele feito pelo hardware de filmagem, que compensa as tremidas ou movimentos involuntários da mão de quem está segurando o equipamento.

Ainda assim, ele não é 100% perfeito e pode ser complementado com uma estabilização via software — e é sobre isso que vamos falar neste post.

A estabilização do vídeo pode ser realizada de diversas formas, como afirmei no começo.
Quando ela é mecânica (física):

  1. O sistema (motor) de estabilização pode ficar embutido no corpo da câmera ou filmadora. Neste caso, é comumente chamado IBIS (In Body Image Stabilization, ou estabilização de imagem dentro do “corpo”, em uma tradução livre) ou, ainda, ICIS (In Camera Image Stabilization).
  2. Alguns fabricantes optam por colocar o sistema de estabilização da imagem dentro das lentes, quando se trata de uma câmera profissional que permite a troca deste acessório. O resultado é o mesmo, mas permite vender câmeras mais baratas e os usuários compram lentes estabilizadas apenas se necessitarem.
  3. Existe também a opção de usar estabilização tanto na câmera quanto na lente. Os dois sistemas podem trabalhar em conjunto para obter resultados ainda melhores.

A estabilização por software é muito usada em câmeras mais baratas e em celulares (onde não há espaço para embutir um sistema de estabilização físico).

há também métodos externos bastante eficientes para obter filmes com imagens estáveis e sem tremores indesejados — por exemplo, gimbals, tripés ou apenas apoiar a câmera sobre uma superfície estável.

Neste post, vamos abordar a técnica de estabilização por software. Embora exista programas GUI (de interface gráfica) plenamente capazes de fazer “a mágica”, vamos abordar o procedimento via CLI, com o ffmpeg.

O procedimento é rápido e muito eficiente… mas se você não gosta de digitar comandos, este artigo não é para você.

A estabilização de imagens em vídeo, via software, é realizada através de um corte (cropping), o que vai dar em uma perda na qualidade do resultado final.
Claro que você pode fazer uma estabilização leve e ter menos perda.
Se achar que o impacto na qualidade final da sua filmagem é aceitável, pode optar por uma aplicação mais pesada do recurso.
A escolha é sua.

Equipamento físico usado na minha filmagem

Só por curiosidade, o equipamento usado na minha filmagem é uma câmera Canon T6 (ou 1300D), com uma lente Canon EF-S 55-250mm f/4-5.6 IS STM.

Neste caso, trata-se de uma lente que possui mecanismo de estabilização de imagem.

O problema é que ao usar o extremo da lente, a estabilização nunca é perfeita. E eu achei que poderia obter um resultado ainda melhor se acrescentasse o recurso de estabilização por software ao meu vídeo.

Meu software de estabilização de imagem

Como já ficou claro no título, vamos usar os recursos presentes no ffmpeg, presente na maioria das distribuições Linux e que já tem compilado, dentro de si, a biblioteca para estabilização de imagens de vídeo, libvidstab.

O processo funciona com um recorte na imagem, que cria margem para os lados “absorverem” os movimentos mais abruptos.
O zoom é um dos “efeitos colaterais” do uso deste recurso.

Veja um exemplo de um dos quadros do vídeo original, abaixo:

Imagem original de vídeo ffmpeg
Vídeo original: beija1.mov

Veja um exemplo do mesmo quadro do vídeo após a estabilização:

Imagem de vídeo com estabilização cropada
Vídeo final: beija1-stab.mov

Percebeu a diferença (e o recorte)?. Tenha isso em mente: quanto mais estabilização você aplicar, via software, maior será o recorte da imagem em vídeo.

Como aplicar estabilização de imagem a vídeos com o ffmpeg

A ferramenta de edição e manipulação de vídeos, ffmpeg, possui diversos recursos para melhorar o seu trabalho.
Para obter estabilização, use a opção ‘-vf’ com o parâmetro ‘vidstabtransform’. Veja como é simples.

Para obter melhores resultados, contudo, recomendo rodar primeiro a detecção de estabilização. Com este procedimento, é criado um pequeno arquivo ‘transforms.trf’, no diretório local, em que os parâmetros e as variáveis de trabalho são registradas.

Veja como eu criei um arquivo transforms.trf em relação ao arquivo de vídeo ‘beija1.mov’ (substitua este nome pelo do seu arquivo, aí):


ffmpeg -i beija1.mov -vf vidstabdetect -f null -

Aguarde o andamento do processo e, em seguida, rode o procedimento de estabilização:


ffmpeg -i beija1.mov -vf vidstabtransform=smoothing=30:input="transforms.trf" beija1-stab.mov

Acima, substitua o nome do arquivo final ‘beija1-stab.mov’, pelo que você achar melhor.
Se não ficar satisfeito com o resultado da estabilização, altere o valor de ‘smoothing=30’ para um número mais alto. Tente 60, 120 etc.

Conclusão

Se achar interessante, pressione Ctrl+D para guardar esta página nos seus favoritos, para uma futura referência sobre o assunto.
Para o meu caso, o valor do smoothing mais adequado foi 600. Veja o que é melhor para você aí.

Leia mais dicas:

  1. Dicas de uso do ffmpeg: https://elias.praciano.com/?s=ffmpeg+vídeo
  2. Dicas de edição de vídeo: https://elias.praciano.com/tag/edicao-de-video/
  3. Dicas de edição de imagem: https://elias.praciano.com/tag/edicao-de-imagem
  4. Dicas relacionadas à câmera Canon T6 ou EOS 1300D: https://elias.praciano.com/tag/canon

Publicado por

Elias Praciano

Autor de tecnologia (livre, de preferência), apaixonado por programação e astronomia. Fã de séries, como "Rick and Morty" e "BoJack Horseman". Me siga no Twitter e vamos trocar ideias!

2 comentários sobre “Como estabilizar vídeo com o ffmpeg”

  1. Show! Uma vez perdi uma semana procurando por isso nas interwebs ..

    “Embora exista programas GUI (de interface gráfica) plenamente capazes de fazer “a mágica”, vamos abordar o procedimento via CLI, com o ffmpeg.”

    Apesar de eu preferir fazer manualmente fiquei curioso quais GUI fazem isso, na mesma pesquisa que eu mencionei anteriormente a única que eu conseguir foi no Blender .. Pode citar alguma ?

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

This site uses Akismet to reduce spam. Learn how your comment data is processed.