Eu tenho uma receita que eu originalmente criei para converter os vídeos em Motion JPEG que minha câmera antiga gera (são vídeos muito grandes, já que cada quadro é uma imagem JPEG inteira) para h264. Aqui está uma adaptação para outros tipos de vídeos (cursos, etc).
Não estou usando o ffmpeg , mas o mplayer e o mencoder . Primeiro, temos que demover o áudio com o mplayer:
mplayer -vo null -ao pcm:fast:file=<audio_pcm.wav> <video>
- Os parâmetros
-vo null
e -ao null
informam ao mplayer para não extrair vídeo.
Nas próximas etapas, faremos uma compactação de 3 passagens com o mencoder. Na primeira etapa, escolheremos uma compactação adequada do Modo de Qualidade Constante (parâmetro crf ) como ponto de partida:
mencoder <video> -ovc x264 \
-x264encopts ratetol=100:preset=veryslow:crf=<value>:pass=1 \
-nosound -o video1.h264
-
Você pode adicionar o parâmetro slow_firstpass ao -x264encopts se estiver paranóico com a qualidade final do vídeo. O manual Mencoder diz que esta opção desabilita alguns parâmetros que “melhoram significativamente a velocidade de codificação, tendo pouco ou nenhum impacto na qualidade do passe final”. Então, use-o apenas na última etapa.
-
Você deve tentar vários valores para crf -
tente iniciar a partir de 25 e continue a aumentá-lo até observar os artefatos no vídeo resultante (valores mais altos compactam mais). Lembre-se de que os passes de codificação subsequentes melhorarão a qualidade escolhida para crf .
-
As alternativas para a predefinição veryslow são mais lentas , lentas , médias etc. Consulte o manual do mencoder para a lista completa.
-
ratetol controla a variação da taxa de bits - não tenho certeza se estou fazendo a coisa certa aqui, mas configuro para o valor máximo para deixar total liberdade para o mencoder para escolher a taxa de bits certa para cada cena.
Após o primeiro passo, você notará que a última linha fornece a taxa de bits média que você usará nas próximas etapas:
(...)
x264 [info]: kb/s:526.43
Altere o parâmetro crf , recomendado na primeira passagem, para taxa de bits , necessário nos passes subsequentes:
mencoder <video> -ovc x264 \
-x264encopts slow_firstpass:ratetol=100:preset=veryslow:bitrate=526:pass=3 \
-nosound -o video2.h264
Esta codificação de segunda passagem lerá as estatísticas geradas na primeira passagem ( divx2pass.log
e divx2pass.log.mbtree
) para otimizar a compactação.
-
Note que você usará a mesma entrada de vídeo, não a gerada pelo primeiro passo - o primeiro vídeo de saída é útil apenas para verificar a qualidade inicial.
-
Note também que pass=3
( não pass=2
) gerará um novo arquivo de estatísticas, para que você possa repetir a última etapa quantas vezes quiser. Eu costumo fazer pass=3
duas vezes, sempre prestando atenção na taxa de bits do resultado.
Enquanto isso, você também pode compactar o áudio usando lame
ou oggenc
:
oggenc -q<n> <audio_pcm.wav>
Por fim, remontamos áudio e vídeo
mencoder -audiofile <audio>.ogg video2.h264 -oac copy -ovc copy \
-of lavf -lavfopts format=mp4 -o <video>.mp4
- O formato de arquivo
-of lavf -lavfopts format=mp4
gera mp4
usando os muxers de lavopts.