Blog Linux Avante

FFmpeg: como cortar vídeos, com exemplos

7 de janeiro de 2020

Este artigo explica como cortar vídeos usando FFmpeg (com exemplos) na linha de comando. É especialmente útil para cortar vários vídeos em lote, mas alguns (inclusive eu) também podem preferir isso a um editor de vídeo completo para fazer alguns cortes de vídeo. O artigo também inclui capturas de tela que mostram exatamente o que está sendo cortado.

Para exemplificar a aplicação do filtro de corte FFmpeg, estou usando esta imagem 500x300, em que cada quadrado tem um tamanho de 100x100 pixels:

Imagem de teste de filtro de corte FFmpeg

Para cada comando de exemplo, a imagem é cortada usando o comando de corte FFmpeg real desse exemplo, para que você possa ver exatamente o que acontece ao usá-lo. Isso é possível porque os mesmos comandos também podem ser usados para cortar.

Para poder usar esses comandos, você precisará ter o FFmpeg instalado em seu sistema. FFmpeg é um projeto gratuito e de código aberto que consiste em várias bibliotecas e programas para lidar com vídeo, áudio e outros arquivos e fluxos de multimídia. Em seu núcleo está o programa de linha de comando FFmpeg, que pode ser usado para transcodificação, edição básica, dimensionamento de vídeo e efeitos de pós-produção.

Uso do filtro de corte FFmpeg

Vamos começar com o básico. Para cortar uma parte de um vídeo usando FFmpeg, o comando tem a seguinte aparência:

Comandos para usar no terminal

ffmpeg -i input.mp4 -filter:v "crop=w:h:x:y" output.mp4

O que tudo isso significa:

  • -i input.mp4 especifica o vídeo de entrada (input.mp4 sendo o vídeo de entrada/original neste caso)
  • -filter:v (pode ser abreviado para -vf) especifica que estamos usando um filtro de vídeo
  • "crop=W:H:X:Y" significa que estamos usando o filtro de vídeo "cortar", com 4 valores:
    • w a largura do vídeo de saída (portanto, a largura da região cortada), que é padronizada para a largura do vídeo de entrada (largura do vídeo de entrada = iw, que é o mesmo que fa0993338b4e44ec203b8); out_w também pode ser usado em vez de w
    • h a altura do vídeo de saída (a altura da região recortada), que assume como padrão a altura do vídeo de entrada (altura do vídeo de entrada = ih, com e82e7c8b6864406bab4a2546c6c56a sendo outra coisa4); out_h também pode ser usado em vez de h
    • x a posição horizontal de onde começar o corte, começando da esquerda (com a margem esquerda absoluta sendo 0)
    • y a posição vertical de onde começar o corte, começando do topo do vídeo (o topo absoluto sendo 0)
  • output.mp4 é o novo arquivo de vídeo recortado

Algumas notas:

  • O filtro irá centralizar automaticamente o corte se x e y são omitidos, assim x padrões para (iw-w)/2 e y para (ih-h)/2
  • Também há uma opção opcional keep_aspect que você pode definir como 1 para forçar a proporção de exibição de saída a ser a mesma da entrada (exemplo de uso: crop=100:100:0:0:keep_aspect=1). Isso não funcionará com imagens, é por isso que você não vê um exemplo separado com captura de tela aqui
  • FFmpeg obtém a largura de vídeo de entrada original (iw) e valores de altura (ih) automaticamente, assim você pode executar operações matemáticas usando esses valores (por exemplo iw/2 para metade da largura vídeo de entrada, ou ih-100 para subtrair 100 pixels a partir da altura de entrada de vídeo).

Isso pode parecer um pouco complicado, mas você verá nos exemplos que não é muito o caso (mas é claro, isso depende do que você deseja alcançar).

Você pode visualizar (reproduzir) o corte do vídeo sem esperar por sua recodificação, reproduzindo-o com ffplay (útil para ver rapidamente se a região cortada está correta), assim:

Comandos para usar no terminal

ffplay -filter:v "crop=w:h:x:y" input.mp4

Isso não modifica o vídeo input.mp4 de forma alguma e não produz um novo vídeo. É apenas para fins de visualização/reprodução.

Exemplos de corte de vídeo FFmpeg

Vejamos um exemplo de corte FFmpeg básico no qual cortaremos um quadrado de 100 pixels do centro.

Para cortar um quadrado de 100 pixels (de modo que a largura e a altura da região cortada seja de 100 pixels) do centro de input.mp4 vídeo, você pode especificar apenas o tamanho da área de corte de 100x100 (já que o filtro de corte do FFmpeg tem como padrão centralizar se os valores x e y não forem especificados), assim:

Comandos para usar no terminal

ffmpeg -i input.mp4 -filter:v "crop=100:100" output.mp4

Exemplo de corte FFmpeg: corte uma seção de 100 x 100 do canto superior esquerdo do vídeo.

Para recortar uma seção de 100x100 pixels do canto superior esquerdo (de modo que x e y sejam 0) de um vídeo, use:

Comandos para usar no terminal

ffmpeg -i input.mp4 -filter:v "crop=100:100:0:0" output.mp4

Exemplo de corte FFmpeg: corte a seção superior direita de 100 x 100 pixels de um vídeo.

Exemplo em que usaremos a largura do vídeo de entrada (iw) para cortar a seção superior direita 100x100 pixels de um vídeo. Em vez de inserir manualmente o valor x, usaremos iw e subtrairemos 100 pixels dele:

Comandos para usar no terminal

ffmpeg -i input.mp4 -filter:v "crop=100:100:iw-100:0" output.mp4

Exemplo de corte FFmpeg: corte um retângulo de 100x200 pixels da posição 0,100.

Para usar o filtro de vídeo de corte FFmpeg para cortar um retângulo de 100x200 pixels da posição 0,100:

Comandos para usar no terminal

ffmpeg -i input.mp4 -filter:v "crop=200:100:300:100" output.mp4

Alguns exemplos mais avançados:

*Cortar um vídeo 16:9 para 4:3 na proporção de aspecto, cortando as bordas (fonte; isso não funciona com imagens, então não deve ser o que é óbvio para exemplificar . *

Comandos para usar no terminal

ffmpeg -i input.mp4 -filter:v "crop=ih/3*4:ih"

Corte 50% da largura e altura começando da parte superior direita do vídeo de entrada.

Corte 50% da largura do vídeo e 50% da altura do vídeo (o que significa que o vídeo de saída será um quarto - 25% - do vídeo de entrada), começando do canto superior direito do vídeo de entrada:

Comandos para usar no terminal

ffmpeg -i input.mp4 -filter:v "crop=iw*(5/10):ih*(5/10):iw:0" output.mp4

Neste caso, estamos usando a largura de entrada (iw) como o x coordenadas (para começar o corte da direita), e 0 como o y coordenadas (para começar a partir do topo).

Usando FFmpeg para cortar pixels da esquerda e/ou direita do vídeo ou das bordas superior e inferior

Para cortar as bordas de um vídeo usando FFmpeg (bordas superior, inferior, esquerda e direita), use:

Comandos para usar no terminal

ffmpeg -i input.mp4 filter:v "crop=iw-n:ih-n" output.mp4

Neste comando, você já sabe que iw representa a largura do vídeo de entrada e ih é a altura do vídeo de entrada (em pixels); como para n e m:

  • n é o número de pixels a recortar de iw (largura do vídeo de entrada)
  • m é o número de pixels a recortar de ih (altura de vídeo de entrada)

Exemplo.

Para cortar 200 pixels da altura de entrada de vídeo (ih), ou seja, para cortar 100 pixels a partir do topo e 100 pixels a partir da parte inferior, e cortar 100 pixels a partir da largura de vídeo de entrada (iw), ou seja, para cortar 50 pixels a partir da esquerda e 50 pixels a partir da direita:

Comandos para usar no terminal

ffmpeg -i input.mp4 filter:v "crop=iw-100:ih-200" output.mp4

Se você sabe/pode especificar a largura e a altura do vídeo de entrada (500x300 neste exemplo), o comando acima também pode ser escrito como:

Comandos para usar no terminal

ffmpeg -i input.mp4 filter:v "crop=500-100:300-200" output.mp4

Isso também é o mesmo:

Comandos para usar no terminal

ffmpeg -i input.mp4 filter:v "crop=400:100" output.mp4

Recortar apenas as bordas esquerda e direita (100 pixels da esquerda e 100 pixels da direita, então 200 pixels no total)

Comandos para usar no terminal

ffmpeg -i input.mp4 filter:v "crop=iw-200" output.mp4

Ou cortar apenas as bordas superior e inferior (100 pixels da parte superior e 100 pixels da parte inferior) usando FFmpeg:

Comandos para usar no terminal

ffmpeg -i input.mp4 filter:v "crop=iw:ih-200" output.mp4

Confira a versão original desse post em inglês
Propaganda
Blog Comments powered by Disqus.