Suponho que você esteja usando a libx264 para codificar o vídeo H.264. O comando mais básico é algo como:
ffmpeg -i input -c:v libx264 -b:v 800k -pass 1 output.mp4
ffmpeg -i input -c:v libx264 -b:v 800k -pass 2 output.mp4
No entanto, pode ser melhorado:
ffmpeg -y -i input -c:v libx264 -preset medium -b:v 800k -an -pass 1 -f mp4 /dev/null
ffmpeg -y -i input -c:v libx264 -preset medium -b:v 800k -c:a aac -b:a 128k -pass 2 -movflags +faststart output.mp4
-
O áudio não precisa ser codificado para o primeiro passo, então
-an
é adicionado ao primeiro comando de passagem. -
A primeira passagem não precisa exibir um arquivo de vídeo, portanto, ela é direcionada para
/dev/null/
. Usuários do Windows podem usarNUL
. -
2 passagens com libx264 normalmente são usadas se você estiver direcionando um tamanho de arquivo de saída específico (
file size = bitrate * duration
). Se isso não for do seu interesse, use apenas uma única passagem com-crf
. -
Use o
-preset
mais lento para o qual você tem paciência. -
Veja FFmpeg Wiki: Guia de codificação de vídeo H.264 para mais informações, incluindo como obtenha o tamanho do arquivo desejado.