Como faço para traduzir as opções do HandbrakeCLI para as opções do FFmpeg?

9

Eu tenho um monte de configurações de linha de comando que funcionam para o freio de mão, mas às vezes em alguns vídeos (não tenho idéia do porquê) handbrake lança "exceção de memória". Eu queria saber se eu posso encontrar as mesmas chaves de opção e fazê-lo com o FFmpeg, mas parece não tão fácil de fazer.

O FFmpeg às vezes não tem essas opções ou faz coisas por padrão. Por exemplo, eu não sei como fazer anamórfico personalizado com FFmpeg. Para mim, é muito importante que os vídeos resultantes sejam tão bons quanto se forem 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 eu ligo isso para um comando FFmpeg?

    
por iLemming 13.02.2013 / 20:12

1 resposta

14

O Handbrake usa o codificador x264 para conversão de vídeo. Há um site com uma visão geral de todas as opções x264 e suas contrapartes do FFmpeg . No entanto, estes sã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 detalhadas, mas chegaremos lá.

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

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

Vamos:

  • --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 . ( --cfr do Handbrake apenas 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ê quer 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 isso com -s:v 1920x1080 , ou se você quiser usar os filtros, -filter:v "scale=1920:1080" .

  • --encoder x264 --vb 5200

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

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

    Semelhante ao acima, com -c:a libfaac -b:a 128K -ac 2 . Note que o FAAC não é mais suportado no FFmpeg; Em vez disso, use o codificador FFmpeg interno com -c:a aac -b:a 128K .

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

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

    Para definir o VBV, use as opções -maxrate 5200K e -bufsize 5200K no ffmpeg.

    Para definir o CRF, use -crf 23 no 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 60 e 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

    Estas 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 esteja diretamente mapeada para as opções do ffmpeg.

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

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 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 uma codificação de qualidade constante para uma conversão para todos os propósitos, use isso e altere o parâmetro -crf de 18 para 28, onde menor significa melhor qualidade e 23 é 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
    
por 13.02.2013 / 21:57