>> Tecnologia Eletrônica >  >> Câmeras >> Câmeras de Vídeo

FFmpeg Corte de Vídeo: Guia Completo de Comandos com Exemplos

O filtro crop do FFmpeg é a faca suíça para corte programático de vídeo. É rápido, lossless (com codec certo) e scriptável. Domine a sintaxe e evite armadilhas comuns.

Sintaxe Básica

ffmpeg -i input.mp4 -vf "crop=w:h:x:y" output.mp4 
  • w = largura saída
  • h = altura saída
  • x = offset horizontal do topo-esquerda (0 = borda esquerda)
  • y = offset vertical do topo-esquerda (0 = borda superior)

Todos valores em pixels. Avaliação de expressão permite matemática (veja abaixo).

Método 1: Coordenadas de Pixel Explícitas

Corte janela 1280x720 começando em (100, 50) de fonte 1920x1080:

ffmpeg -i input.mp4 -vf "crop=1280:720:100:50" -c:a copy output.mp4 
  • -c:a copy = Stream copy áudio (sem re-encode, rápido, sem perda qualidade).
  • Vídeo irá re-encode (corte muda pixels). Use -c:v libx264 -crf 18 -preset slow para alta qualidade.

Método 2: Corte Relativo / Centralizado (Expressões)

Use iw (input width) e ih (input height) para comandos agnósticos de resolução.

Central Crop (Mais Comum)

# Cortar centro 75% largura x 75% altura ffmpeg -i input.mp4 -vf "crop=iw*0.75:ih*0.75:(iw-ow)/2:(ih-oh)/2" -c:a copy output.mp4 
  • ow / oh = largura/altura saída (calculada dos dois primeiros args).
  • (iw-ow)/2 centraliza horizontalmente. (ih-oh)/2 centraliza verticalmente.

Conversão Aspect Ratio (16:9 → 9:16 Vertical)

# Cortar centro vertical 9:16 de 16:9 (ex.: 1920x1080 -> 607x1080) ffmpeg -i input.mp4 -vf "crop=ih*9/16:ih:(iw-ow)/2:0" -c:a copy vertical.mp4 

Remover Barras Pretas (Auto-Detect)

# Detectar bordas pretas por 1 seg, então cortar ffmpeg -i input.mp4 -vf "cropdetect=24:16:0" -f null - 2>&1 | grep crop | tail -1 # Exemplo saída: [Parsed_cropdetect_0 @ 0x...] crop=1920:800:0:140 # Use valores detectados: ffmpeg -i input.mp4 -vf "crop=1920:800:0:140" -c:a copy output.mp4 

Método 3: Baseado em Porcentagem (Rápido Redes Sociais)

# Cortar para 80% central largura, 90% altura ffmpeg -i input.mp4 -vf "crop=iw*0.8:ih*0.9:(iw-ow)/2:(ih-oh)/2" output.mp4 

Avançado: Corte Variável no Tempo (Keyframed / Animado)

Use filtro sendcmd ou crop com expressões t (timestamp).

# Zoom in de frame cheio para centro 50% em 5 segundos ffmpeg -i input.mp4 -vf " crop= w='iw*max(0.5,1-0.1*t)': h='ih*max(0.5,1-0.1*t)': x='(iw-ow)/2': y='(ih-oh)/2' " -c:a copy zoom_crop.mp4 

t = segundos. Em t=0: 100%. Em t=5: 50%. Easing linear.

Armadilhas Críticas

ProblemaCausaCorreção
Dimensões saída não divisíveis por 2H.264/HEVC requer largura/altura parUse crop='if(gt(iw,ih),-2,ih*9/16)':... ou garanta matemática par. FFmpeg auto-ajusta com +0 mas avisa.
Crop excede inputx+w > iw ou y+h > ihValide com ffprobe -v error -select_streams v:0 -show_entries stream=width,height input.mp4
Aspect ratio parece esticadoPlayer ignora SAR / DARAdicione -vf "crop=...,setsar=1" ou -aspect 16:9 na saída.
Perda qualidadeRe-encode defaults (CRF 23)Explícito -c:v libx264 -crf 18 -preset slow (ou -c:v copy se APENAS cortando I-frames? Não, crop sempre re-encoda).
Drift áudioRe-encode vídeo muda duração levemente-c:a copy sempre. Se sync crítico, use -async 1.

Workflow Pro: Batch Crop Pasta

# Bash / Zsh / PowerShell for f in *.mp4; do ffmpeg -i "$f" -vf "crop=ih*9/16:ih:(iw-ow)/2:0" -c:v libx264 -crf 20 -preset medium -c:a copy "cropped_${f}" done 

Sempre rode ffprobe primeiro. Scripte a matemática. Use -c:a copy. Arquive originais.