Come posso tradurre le opzioni di HandbrakeCLI in FFmpeg?


13

Ho un sacco di impostazioni della riga di comando che funzionano per il freno a mano, ma a volte su alcuni video (non ho idea del perché) il freno a mano genera "Eccezione di memoria insufficiente". Mi chiedevo se posso trovare gli stessi tasti opzione e farlo con FFmpeg, ma non sembra una cosa così facile da fare.

FFmpeg a volte non ha queste opzioni o fa cose per impostazione predefinita. Ad esempio, non so come fare anamorfico personalizzato con FFmpeg. Per me è molto importante che i video risultanti siano buoni come se fossero fatti con il freno a mano. Ecco la linea per il freno a mano:

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

Come posso trasformarlo in un comando FFmpeg?

Risposte:


20

Il freno a mano utilizza l'encoder x264 per la conversione video. C'è un sito con una panoramica di tutte le opzioni x264 e le loro controparti FFmpeg . Tuttavia, questi sono un po 'deprecati e alcune di queste opzioni non funzionano più o potrebbero essere state rinominate. Dovresti usare i profili x264 per la maggior parte delle opzioni di dettaglio, ma ci arriveremo.

Molte delle opzioni di base del freno a mano (ad esempio la frequenza dei fotogrammi) non sono specifiche per x264 e sono sparse nella documentazione online di FFmpeg .

Prima di iniziare, controlla di utilizzare una versione FFmpeg recente. Il loro sito di download ha build statiche per tutti i principali sistemi operativi.

Andiamo:

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

    La sintassi di FFmpeg è ffmpeg -i input.mpg … d:\output.mp4.

  • --rate 29.97

    Specificare la frequenza dei fotogrammi video con -r 29.97. (Il freno a mano --cfrimposta solo un frame rate costante. Non è necessario qui).

  • --arate 44.1

    Impostare la frequenza di campionamento audio con -ar 44100(in Hz).

  • --format mp4

    Non necessario perché FFmpeg sa che vuoi MP4.

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

    Ciò non fa nulla a parte impostare le dimensioni su 1920 × 1080. In FFmpeg, farlo con -s:v 1920x1080, o se si desidera utilizzare i filtri, -filter:v "scale=1920:1080".

  • --encoder x264 --vb 5200

    Impostare l'encoder con -c:v libx264e la velocità in bit su costante con -b:v 5200K. Nota che non siamo ancora presenti quando si tratta di impostazioni di qualità.

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

    Simile a sopra, con -c:a libfaac -b:a 128K -ac 2. Si noti che FAAC non è più supportato in FFmpeg; utilizzare invece l'encoder FFmpeg integrato con -c:a aac -b:a 128K.

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

    Questo imposta la modalità di codifica su VBV che ha come obiettivo uno scenario di streaming anziché solo un bitrate costante o una qualità costante. La qualità costante è anche chiamata CRF , il valore predefinito per x264 - si chiama "Rate Factor" nel freno a mano. Mentre CRF di solito ti offre i migliori codici di qualità, la modalità VBV ti offre un file che è più adatto per lo streaming online o per alcuni dispositivi con capacità limitate.

    Per impostare VBV, utilizzare le opzioni -maxrate 5200Ke -bufsize 5200Kin ffmpeg.

    Per impostare CRF, utilizzare -crf 23in ffmpeg.

  • level=42

    Usa -level 42. Questo è il livello H.264 .

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

    Impostare il numero di cornici B con -bf 2. L'intervallo minimo di fotogrammi chiave è impostato con -keyint_min 60e l'intervallo massimo con -g 60. Il numero di immagini di riferimento è impostato con -refs 4.

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

    Queste sono opzioni che puoi impostare in ffmpeg in aggiunta a -x264-params me=umh:merange=64:subme=7:8x8dct:cabac=1- come qualsiasi altra impostazione dell'encoder x264 che non è direttamente associata alle opzioni di ffmpeg.

    Ecco la versione "TL; DR" se sei pigro, non ti preoccupare dei dettagli, o se le cose non funzionano: Usa -preset:v medium(o lascialo fuori, poiché la preimpostazione media è predefinita). I preset x264 scelgono una serie di opzioni che scambiano la velocità di codifica per l'efficienza di compressione. Stanno comodamente nominati da ultrafast, superfast, veryfast, faster, fast, mediuma slow, slowere veryslow. Scegli quello con cui ti senti a tuo agio.

Quindi, per riassumere, la versione lunga:

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

O quello breve che userei (con la codifica VBV e alcune opzioni di dettaglio rimosse):

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

Passando alla codifica di qualità costante per una conversione per tutti gli usi, utilizzare questo e modificare il -crfparametro da 18 a 28, dove inferiore indica una qualità migliore e 23 è l'impostazione predefinita:

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, proprio mentre stavo dando gli ultimi ritocchi alla mia risposta, tu vai a dare uno migliore.
evilsoup,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.