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 feita pela câmera, com o uso de um sistema físico, 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.

O procedimento, da maneira que irei mostrar, é simples e muito rápido — mas implica em um custo sobre a qualidade da imagem.

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

Faça edição de vídeo e áudio com o Shotcut.

O Shotcut é um editor de vídeos livre, multiplataforma e de código aberto.
Você não precisa pagar nada por ele e pode rodar no Windows, Mac e Linux.

Seus principais atrativos incluem suporte a múltiplos formatos de arquivos de vídeo e a resoluções em 4K.
A lista segue:

  1. Graças ao FFMPEG, tem suporte a formatos de atuais de áudio e vídeo.
  2. Permite trabalhar com imagens no formato BMP, GIF, JPEG, PNG, SVG, TGA, TIFF etc.
  3. Não necessita importar vídeos. Ele oferece edição nativa da timeline.
  4. Sistema de buscas precisa para vários formatos de arquivos de vídeo.
  5. Captura da sua webcam.
  6. Captura do áudio do seu PC/laptop.
  7. Capacidade de reprodução do fluxo da rede (network stream playback — HTTP, HLS, RTMP, MMS, UDP).
  8. Plug ins de geração de vídeo Frei0r — barras coloridas, plasma etc.
  9. Exportação de EDL (Edit Decision List CMX3600).
  10. Exportação de quadros únicos ou sequências de vídeo.

Vamos falar um pouco mais das capacidade de manipulação de áudio e vídeo do Shotcut… mas, se você já sabe tudo, pode pular para a sessão de instalação, logo abaixo.

Recursos de edição de áudio

O software faz a edição básica do áudio dos seus vídeos, com opções de ajuste do volume, loudness e medição de pico.
Entre os recursos principais, o site (veja links ao final) lista os seguintes:

  1. Filtros de áudio: controle de agudos e graves, compressor, canal duplicado, tempo, expansor, downmix, ganho, high pass, limite, low pass, normalizar, reverberação etc. Se você conhece o Audacity, vai se sentir em casa.
  2. Permite mixagem de áudio sobre todas trilhas.
  3. Apresenta controles fade (in & out) fáceis de usar, para áudio e vídeo, direto na timeline.
  4. Gerador de tons.
  5. JACK transport sync
  6. Transições de dissolução cruzada (cross-fade) de áudio e vídeo em sobreposição de tomadas na mesma trilha da timeline.

Efeitos de vídeo

O aplicativo tem opções de composição sobre as trilhas de vídeo aceita o HTML5 como fonte de vídeo e de filtros.
Segue a relação de principais recursos de efeitos visuais do Shotcut:

  1. Controles de correção de cores e graduação para sombras, tons médios e claros.
  2. Desentrelaçamento e rotação automática.
  3. Ferramenta “conta-gotas” de seleção de cor natural para fazer o balanço de branco adequado.
  4. Transições de vídeo: barra, portais, caixa, radial, íris, matrix etc.
  5. Acompanhamento de modos de composição ou mistura.
  6. Filtros prontos de vídeo e efeitos de velocidade para clips de áudio/vídeo.

Recursos de edição

O programa inclui ferramentas básicas de edição e várias avançadas.
Entre as principais, citam-se:

  1. Operações de corte, exclusão e colagem.
  2. Controles de ocultar, travar e emudecer a trilha.
  3. Suporte a múltiplas trilhas, com thumbnails.
  4. Desfazer/refazer ações ilimitado.

Mais recursos interessantes

Além de ser multiplataforma, em relação a sistemas operacionais, pode rodar como aplicativo portátil, a partir de um drive externo.
A interface ao usuário está traduzida para 26 idiomas, inclusive o Português.
Tem suporte a vários dispositivos e métodos de captura de vídeo e áudio, como SDI, entradas HDMI, webcam (Video 4 Linux, PulseAudio etc.

Como baixar e instalar o Shotcut

Usuários Windows e Mac, podem fazer o download dos pacotes de instalação a partir da página oficial de downloads do programa: https://www.shotcut.org/download/.

Usuários Linux, podem instalar via SNAP:


sudo snap install shotcut --classic

Você vai encontrar o pacote SNAP do Shotcut também na loja online: https://snapcraft.io/shotcut.
Leia mais sobre suporte a snap, nesta página.

Como usar o Shotcut sem instalar

Você pode fazer download do pacote Shotcut portable, para sistemas operacionais 64-bit, na página do projeto (GitHun): https://github.com/mltframework/shotcut/releases/.
Há versões para Linux, Mac e Windows.
Se você usa Linux, baixe a versão apropriada e descompacte-a no diretório ou drive (pode ser um pendrive) a partir do qual deseja rodar o programa. Siga o exemplo, abaixo:


tar xvvjf shotcut-linux-x86_64-180306.tar.bz2

Em seguida, basta rodar o executável do Nautilus.
nautilus shortcut

Eventualmente, o sistema irá pedir uma confirmação sobre a execução do programa.
confirmar execução

Depois de confirmado, o Shortcut se abre pronto para começar a trabalhar.
shortcut

Como copiar, cortar e colar trechos de um vídeo no Linux com o ffmpeg

O Linux tem ótimos editores de vídeo gráficos (GUI) e que podem ser usados para copiar trechos de um vídeo.
Neste tutorial, vou mostrar como realizar uma operação de edição — copiar/cortar um trecho de um vídeo e colar em um novo arquivo — usando a linha de comando (CLI).

O objetivo deste tipo de procedimento é criar um outro arquivo de vídeo, contendo apenas o trecho que você selecionou.

No meu exemplo, vou usar o arquivo de vídeo ‘video_original.mp4’, com 1 hora de duração.
Vamos supor que eu esteja interessado apenas em um trecho de 15 minutos, que desejo postar nas redes sociais.
Se o trecho começa aos 34 minutos e 14 segundos, o meu comando ficaria assim:


ffmpeg -i video_original.mp4 -vcodec copy -acodec copy -ss 00:34:14 -t 00:15:00 trecho001.mp4

Entenda melhor o comando:

  • -i — opção input onde é indicado o nome do vídeo (video_original) sobre o qual o procedimento será realizado (ele não sofrerá alterações).
  • -vcodec copy‘ e ‘-acodec copy‘ — indica que os codecs originais de vídeo e áudio serão copiados e mantidos sem alterações.
  • -ss 00:34:14 — indica para iniciar a copia às 00h:34m:14s.
  • -t 00:15:00 — indica a duração da cópia.
  • por fim, fica especificado o arquivo de saída trecho001.mp4.

Se quiser extrair outros trechos, basta repetir o procedimento, alterando os números referentes ao ínicio e à duração.
Depois, se quiser, pode juntar os trechos retirados do arquivo original em um novo arquivo. Veja como:


cat trecho001.mp4 trecho002.mp4 > novo_arquivo.mp4

O procedimento acima costuma funcionar para mim, mas não é muito confiável para ser realizado com todo tipo de arquivo.
Mas, neste caso, sugiro usar um editor GUI, por que ele permite fazer a junção com algum efeito, o que evitaria obter um resultado “cru” e mau acabado.

Qual a vantagem de fazer a edição de vídeo na CLI, se tem tantos ótimos editores gráficos?

Se você executou os procedimentos acima, talvez tenha percebido o quanto foram rápidos e, melhor ainda, quase não consumiram os recursos do seu hardware.
Ferramentas CLI, como o ffmpeg e o avconv (entre outras) são muito convenientes quando temos procedimentos simples para realizar — neste caso, fazer cortes “secos” no vídeo, sem qualquer transição.
Deixe as ferramentas GUI para realizar tarefas mais complexas ou que exijam que você seja mais minucioso.
Sugiro, ainda, guardar esta página no seu menu Favoritos (Ctrl + D). Quando precisar cortar vídeos de novo, basta voltar aqui, copiar, colar o comando e editar seus parâmetros e opções.


Não esqueça de dar uma olhada no tutorial como girar um vídeo com o ffmpeg.

Como girar um vídeo, usando o ffmpeg

O nicho de edição de vídeo, no Linux, está muito bem servido, obrigado.
Há, pelo menos, 10 grandes editores de vídeo GUI (Graphic User Interface), para usar no sistema operacional do pinguim. Cada qual é voltado para um público específico.
Ao contrário do que muita gente sabe, contudo, também é possível fazer edição de vídeo na CLI (ou linha de comando).

Se você tem apenas um pequeno ajuste a ser feito em um arquivo de vídeo, pode ser mais interessante executar um ou dois comandos no terminal — em vez de abrir um programa e ter que aguardar o seu carregamento antes de poder fazer qualquer coisa com ele.

O ffmpeg é um utilitário de edição de arquivos multimídia bastante conhecido.
É possível realizar inúmeras tarefas de edição de vídeo com ele.
Neste post, vou me concentrar em apenas uma destas tarefas: alterar a orientação do vídeo.
Esta é uma demanda razoavelmente comum para quem grava vídeos com o celular. Ao reproduzir o vídeo, você descobre que não ficou legal filmar o evento com o aparelho deitado (na horizontal).
Nos exemplos, que seguem, vou usar “origem.mp4” como nome do meu arquivo de entrada. O “destino.mp4” é o arquivo de saída, resultante da edição.
Substitua os nomes dos arquivos dos exemplos pelos seus.
Para alterar a orientação do vídeo verticalmente:

ffmpeg -i origem.mp4 -vf vflip -c:a copy destino.mp4

Para alternar horizontalmente:

ffmpeg -i origem.mp4 -vf hflip -c:a copy destino.mp4

Para girar 90 graus, no sentido horário

ffmpeg -i origem.mp4 -vf transpose=1 -c:a copy destino.mp4

Para girar 90 graus, no sentido anti-horário

ffmpeg -i origem.mp4 -vf transpose=2 -c:a copy destino.mp4