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.
ffmpeg -i input.mp4 -vf "crop=w:h:x:y" output.mp4
Todos valores em pixels. Avaliação de expressão permite matemática (veja abaixo).
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).-c:v libx264 -crf 18 -preset slow para alta qualidade.Use iw (input width) e ih (input height) para comandos agnósticos de resolução.
# 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.# 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
# 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
# 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
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.
| Problema | Causa | Correção |
|---|---|---|
| Dimensões saída não divisíveis por 2 | H.264/HEVC requer largura/altura par | Use crop='if(gt(iw,ih),-2,ih*9/16)':... ou garanta matemática par. FFmpeg auto-ajusta com +0 mas avisa. |
| Crop excede input | x+w > iw ou y+h > ih | Valide com ffprobe -v error -select_streams v:0 -show_entries stream=width,height input.mp4 |
| Aspect ratio parece esticado | Player ignora SAR / DAR | Adicione -vf "crop=...,setsar=1" ou -aspect 16:9 na saída. |
| Perda qualidade | Re-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 áudio | Re-encode vídeo muda duração levemente | -c:a copy sempre. Se sync crítico, use -async 1. |
# 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.
Tecnologia Eletrônica © [www.351231.com]