Como eu traduzo as opções do HandbrakeCLI para as opções do FFmpeg?


13

Eu tenho várias configurações de linha de comando que funcionam com o freio de mão, mas algumas vezes em alguns vídeos (não sei por que) o freio de mão lança "Exceção de falta de memória". Fiquei me perguntando se posso encontrar as mesmas teclas de opção e fazê-lo com FFmpeg, mas não parece tão fácil de fazer.

Às vezes, o FFmpeg não possui essas opções ou faz coisas por padrão. Por exemplo, eu não sei como fazer anamórfico personalizado com o FFmpeg. Para mim, é muito importante que os vídeos resultantes sejam tão bons como se fossem feitos com o freio de mão. Aqui está a linha do Handbrake:

HandBrakeCLI.exe --input "d:\input.mpg" --output "d:\output.mp4" --rate 29.97 --cfr --arate 44.1 --format mp4 --width 1920 --height 1080 --custom-anamorphic --display-width 1920 --keep-display-aspect --modulus 8 --crop 0:0:0:0 --encoder x264 --vb 5200 --aencoder faac --ab 128 --mixdown stereo -x bitrate=5200:vbv-bufsize=5200:vbv-maxrate=5200:level=42:bframes=2:min-keyint=60:keyint=60:ref=4:me=umh:merange=64:subme=7:8x8dct:cabac=1  -v3 -2 -a none

Como faço para transformar isso em um comando FFmpeg?

Respostas:


20

O freio de mão usa o codificador x264 para conversão de vídeo. Existe um site com uma visão geral de todas as opções do x264 e seus equivalentes do FFmpeg . No entanto, eles estão um pouco obsoletos e algumas dessas opções não funcionam mais ou podem ter sido renomeadas. Você deve usar os perfis x264 para a maioria das opções de detalhes - mas chegaremos lá.

Muitas das opções básicas do freio de mão (por exemplo, taxa de quadros) não são específicas para x264 e estão espalhadas pela documentação on-line do FFmpeg .

Antes de começarmos, verifique se você usa uma versão recente do FFmpeg. Seu site de download possui versões estáticas para todos os principais sistemas operacionais.

Vamos lá:

  • --input "d:\input.mpg" --output "d:\output.mp4"

    A sintaxe do FFmpeg é ffmpeg -i input.mpg … d:\output.mp4.

  • --rate 29.97

    Especifique a taxa de quadros de vídeo com -r 29.97. (O freio de mão --cfrapenas define uma taxa de quadros constante. Não é necessário aqui).

  • --arate 44.1

    Defina a taxa de amostragem de áudio com -ar 44100(em Hz).

  • --format mp4

    Não é necessário porque o FFmpeg sabe que você deseja MP4.

  • --width 1920 --height 1080 --custom-anamorphic --display-width 1920 --keep-display-aspect --modulus 8 --crop 0:0:0:0

    Isso não faz nada além de definir o tamanho para 1920 × 1080. No FFmpeg, faça-o com -s:v 1920x1080, ou se desejar usar os filtros -filter:v "scale=1920:1080",.

  • --encoder x264 --vb 5200

    Defina o codificador com -c:v libx264e a taxa de bits para constante com -b:v 5200K. Observe que ainda não estamos lá quando se trata de configurações de qualidade.

  • --aencoder faac --ab 128 --mixdown stereo

    Semelhante ao anterior, com -c:a libfaac -b:a 128K -ac 2. Observe que o FAAC não é mais suportado no FFmpeg; em vez disso, use o codificador FFmpeg embutido com -c:a aac -b:a 128Kele.

  • -x bitrate=5200:vbv-bufsize=5200:vbv-maxrate=5200

    Isso define o modo de codificação para VBV, que visa um cenário de streaming em vez de apenas uma taxa de bits constante ou qualidade constante. A qualidade constante também é chamada de CRF , o padrão para x264 - é chamado de "Fator de taxa" no freio de mão. Embora o CRF geralmente ofereça a melhor codificação de qualidade, o modo VBV oferece um arquivo mais adequado para transmissão on-line ou para determinados dispositivos com recursos limitados.

    Para definir o VBV, use as opções -maxrate 5200Ke -bufsize 5200Kem ffmpeg.

    Para definir o CRF, use -crf 23no ffmpeg.

  • level=42

    Use -level 42. Este é o nível H.264 .

  • bframes=2:min-keyint=60:keyint=60:ref=4

    Defina o número de quadros B com -bf 2. O intervalo mínimo do quadro-chave é definido com -keyint_min 60e o intervalo máximo com -g 60. O número de imagens de referência é definido com -refs 4.

  • me=umh:merange=64:subme=7:8x8dct:cabac=1

    Essas são opções que você pode definir no ffmpeg adicionalmente com -x264-params me=umh:merange=64:subme=7:8x8dct:cabac=1- como qualquer outra configuração do codificador x264 que não seja diretamente mapeada para as opções do ffmpeg.

    Aqui está a versão "TL; DR" se você for preguiçoso, não se importa com os detalhes ou se as coisas não funcionarem: Use -preset:v medium(ou deixe de fora, pois a predefinição média é o padrão). As predefinições x264 escolhem um conjunto de opções que trocam a velocidade de codificação pela eficiência da compactação. Eles estão convenientemente chamado de ultrafast, superfast, veryfast, faster, fast, mediuma slow, slowere veryslow. Escolha o que você se sentir confortável.

Então, para resumir, a versão longa:

ffmpeg -i input.mpg -c:v libx264 -r 29.97 -s:v 1920x1080 -b:v 5200K -maxrate 5200K -bufsize 5200K -level 42 -bf 2 -keyint_min 60 -g 60 -refs 4 -x264-params me=umh:merange=64:subme=7:8x8dct:cabac=1 -c:a aac -b:a 128K -ar 44100 d:\output.mp4

Ou o curto que eu usaria (com a codificação VBV e algumas opções detalhadas removidas):

ffmpeg -i input.mpg -c:v libx264 -r 29.97 -s:v 1920x1080 -b:v 5200K -maxrate 5200K -bufsize 5200K -c:a aac -b:a 128K -ar 44100 d:\output.mp4

Alterando para a codificação de qualidade constante para uma conversão para todos os fins, use isso e altere o -crfparâmetro de 18 para 28, onde inferior significa melhor qualidade e 23 é o padrão:

ffmpeg -i input.mpg -c:v libx264 -r 29.97 -s:v 1920x1080 -crf 23 -c:a aac -b:a 128K -ar 44100 d:\output.mp4

Haha @slhck, assim como eu estava dando os retoques finais na minha resposta, você vai e dá uma melhor.
evilsoup
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.