Trucchi e impostazioni predefinite che funzionano effettivamente con FFmpeg 1.0?


28

Ho provato una serie di "cheat sheet" disponibili altrove, ma quasi tutti sono obsoleti e semplicemente NON funzionano con l'ultima versione di FFMpeg.

Qualcuno può indicarmi le impostazioni che funzioneranno con l'ultimo FFMpeg?

Sono principalmente interessato ai seguenti codec

H.264, preset di bassa e media qualità

così come

ProRes, preset di bassa e media qualità

Risposte:


49

FFmpeg non include più preset e profili basati su file di testo per libx264, ovvero ciò che hai usato con l' -vpreopzione. Questi sono stati ammortizzati e rimosso in favore di accedere ai preset x264 reali, profili (e melodie) con la -preset, -profile:ve -tunele opzioni. I vecchi file di testo emulavano solo i predefiniti e i profili x264 ufficiali e, a causa di diverse limitazioni, non potevano offrire la piena funzionalità fornita dal nuovo sistema. È anche molto più facile da mantenere.

Inoltre, molti encoder hanno le loro opzioni separate; chiamato anche "opzioni private". Dovrai esaminare le opzioni dell'encoder audio e video per i codec comuni nella documentazione online di FFmpeg o controllare l'output di ffmpeg -h fullper un elenco completo delle opzioni supportate. Ad esempio, x264 elenca le sue opzioni libx264 AVOptionsnell'output della guida completo.

Se ffmpeg supporta, -presetnon è necessario utilizzare alcun predefinito di file di testo e FFmpeg non viene più fornito con altri preset di iPod non standard. È un'idea sbagliata comune che i predefiniti di testo possano essere semplicemente copiati da qualsiasi luogo e utilizzati con qualsiasi ffmpeg. Questo è falso e comporterà la rottura.


Fondamentalmente, i preset ti hanno permesso di fare le seguenti cose:

Controllo della qualità

La qualità viene controllata specificando un bitrate attraverso -b:v(per il video) o -b:a(per l'audio) o specificando qualsiasi altro metodo di codifica che il codec potrebbe supportare.

Per x264, ci sono vari metodi di codifica, con il metodo Fattore di tasso costante il più sofisticato. Risulta in bitrate variabile, ma nel complesso buona qualità in un singolo passaggio. I valori CRF vanno da 0 a 51, ma i valori sani sono compresi tra 19 e 26, a seconda della fonte e della qualità che desideri. 23 è predefinito, quindi ad esempio puoi scegliere 18 per "alta qualità" e 28 per "bassa qualità", qualunque cosa significhi per te.

ffmpeg -i input.mp4 -c:v libx264 -crf 23 output.mp4

x264 ha anche altri metodi di codifica , ma qui non rientra nell'ambito.

Vincola il profilo H.264

Questi profili definiscono un set di funzionalità che l'encoder può utilizzare per abbinare le capacità di un determinato decoder. Nel recente FFmpeg, utilizzare la seguente sintassi per specificare un profilo, in cui profilo potrebbe essere baseline, maino high:

ffmpeg -i input.mp4 -c:v libx264 -profile:v baseline output.mp4

Per ulteriori informazioni e quando utilizzare il profilo, vedere: Quali sono le differenze tra i profili H.264?

Scegli una codifica x264 preset

Questi preset influenzano la velocità di codifica. L'uso di una preimpostazione più lenta offre una migliore compressione o qualità per dimensione del file, mentre le preimpostazioni più veloci aumentano la compressione. In generale, dovresti semplicemente usare il preset che puoi permetterti di aspettare. I preset possono essere ultrafast, superfast, veryfast, faster, fast, medium(default), slowe veryslow. Ecco un esempio:

ffmpeg -i input.mp4 -c:v libx264 -preset slow output.mp4

Codifica video senza perdita di dati

Questo è possibile specificando un CRF di 0, quindi usa semplicemente -crf 0:

ffmpeg -i input.mp4 -c:v libx264 -crf 0 output.mp4

Infine, parliamo rapidamente di ProRes. ProRes accetta un bitrate fisso con -b:vo è possibile specificare il profilo, che dovrebbe essere un valore compreso tra 0 e 3 , in cui i bit rate vengono scelti in base al profilo. Superiore significa meglio:

ffmpeg -i input.mp4 -c:v prores -profile:v 0 output.mov

Il Wiki ffmbc suggerisce che è possibile utilizzare i nomi dei profili, ma ciò non riesce in FFmpeg 1.0.


Cosa devo fare per ridurre le possibilità di errore di conversione, sta accadendo a caso, a volte non succede
FlyingAtom

@FlyingAtom Non ho ancora sentito parlare di "Conversion Fail". Se hai una domanda specifica con un problema riproducibile, fai una nuova domanda: superuser.com/questions/ask
slhck

Quindi, cosa vorresti effettivamente finire se tutto ciò che ti veniva fornito fosse ffmpeg -i input.mp4 -c:v libx264 output.mp4? crf: 23 e preset: medio?
Drazen Bjelovuk,

1
@Drazen Sì, esatto.
Slhck,

Saluti! -------
Drazen Bjelovuk il

20

Ho fatto un test in cui ho transcodificato (usando la codifica libx264 per .mp4) un video di alta qualità da una videocamera Sony usando l'intera gamma di valori preimpostati (tranne il placebo) su una gamma di valori CRF (18, 21, 24 e 27 ). Volevo sapere cosa mi avrebbe dato la migliore combinazione di velocità di codifica, qualità di output e dimensione del file.

Per ogni valore CRF, ho dato ad ogni operazione di transcodice un punteggio per il suo tempo di codifica (ad esempio, per CRF = 18, il valore predefinito tempo ultraveloce di 5,7 secondi ha ottenuto un punteggio di 1,0, il tempo di veryslow di 162 secondi ha ottenuto uno 0, con tutti altri punteggi in scala). Ho calcolato i punteggi delle dimensioni del file di output in modo simile, ovviamente dando al file più piccolo il punteggio migliore. Ho quindi aggiunto i due punteggi per un punteggio velocità / dimensioni "combinato".

Per ciascuno dei quattro valori CRF, il preset "veryfast" è stato il vincitore a mani basse, con punteggi quasi perfetti di 1,94 (per CRF 18 e 21), 1,96 (CRF 24) e 1,97 (CRF 27). Trovo molto curioso che "molto veloce" abbia prodotto quasi sempre la dimensione del file più piccola , perdendo solo a "veryslow" e mai di molto.

Una differenza che ho notato tra i vari valori preimpostati era che il sistema operativo (Windows 7) mi avrebbe dato diverse anteprime. Le preimpostazioni più veloci mostrerebbero una miniatura di alcuni secondi nel video, in cui le anteprime per le preimpostazioni più lente rispeccherebbero i frame di apertura del video. Questo non è importante per me; quello che ho imparato è che "-preset veryfast" sembra essere una scelta facile.

Ecco i miei risultati (come immagine istantanea di un foglio di calcolo Excel):
eccellere istantanea

Ecco il foglio di calcolo Excel come testo CSV:

CRF,Preset,Seconds,score,MB,score,totalscore
18,1_ultrafast,5.7,1.00,59.5,0.09,1.09
18,2_superfast,8.4,0.98,62.3,0.00,0.98
18,3_veryfast,10.8,0.97,30.9,0.98,1.94
18,4_faster,16.0,0.93,33.5,0.89,1.83
18,5_fast,24.0,0.88,36.8,0.79,1.68
18,6_medium,29.1,0.85,34.9,0.85,1.70
18,7_slow,48.1,0.73,33.9,0.88,1.61
18,8_slower,84.9,0.49,33.0,0.91,1.40
18,9_veryslow,162.0,0.00,30.1,1.00,1.00
21,1_ultrafast,5.7,1.00,38.0,0.00,1.00
21,2_superfast,7.9,0.98,35.0,0.15,1.14
21,3_veryfast,10.0,0.97,19.0,0.97,1.94
21,4_faster,14.2,0.94,21.0,0.87,1.80
21,5_fast,19.9,0.89,23.0,0.77,1.66
21,6_medium,24.6,0.86,22.0,0.82,1.67
21,7_slow,43.1,0.72,21.0,0.87,1.58
21,8_slower,69.8,0.51,20.5,0.89,1.41
21,9_veryslow,137.3,0.00,18.4,1.00,1.00
24,1_ultrafast,5.5,1.00,24.9,0.00,1.00
24,2_superfast,7.5,0.98,21.4,0.27,1.25
24,3_veryfast,9.3,0.97,12.0,0.99,1.96
24,4_faster,13.2,0.93,14.0,0.84,1.77
24,5_fast,17.4,0.90,15.0,0.76,1.66
24,6_medium,21.0,0.87,14.4,0.81,1.67
24,7_slow,37.3,0.72,14.0,0.84,1.56
24,8_slower,62.2,0.51,13.0,0.92,1.42
24,9_veryslow,121.1,0.00,11.9,1.00,1.00
27,1_ultrafast,5.5,1.00,16.8,0.00,1.00
27,2_superfast,7.4,0.98,13.6,0.38,1.36
27,3_veryfast,9.0,0.97,8.4,1.00,1.97
27,4_faster,12.6,0.93,10.1,0.80,1.73
27,5_fast,15.8,0.90,10.4,0.76,1.66
27,6_medium,18.8,0.87,10.0,0.81,1.68
27,7_slow,34.1,0.73,9.8,0.83,1.56
27,8_slower,59.6,0.48,9.0,0.93,1.41
27,9_veryslow,109.7,0.00,8.4,1.00,1.00

3
So che le opzioni di formattazione di Super User sono mediocri, ma potrebbe essere utile se hai pubblicato i dati come testo, possibilmente usando la formattazione del codice.
Scott,

1
Affascinante. È anche più veloce sulla mia macchina. Grazie!
joeytwiddle,

1
Devo ammettere che ho guardato i tuoi risultati con sospetto, ma ho ripetuto il test e ho ottenuto risultati simili, usando la versione 3.3.2-1 di ffmpeg su un filmato di 2 minuti a 1080p. In effetti molto veloce ha generato la dimensione del file più piccola il 60% delle volte, arrivando 2 ° a quasi il 40% delle volte (ma non di molto). D'ora in poi userò veryfast per tutti i miei codifiche insieme a un valore CRF abbastanza basso (18, 19, 20) poiché veryfast era solo un po 'più lento con i valori CRF più bassi rispetto a quelli più alti. Grazie mi hai risparmiato un sacco di tempo. Dati grezzi e script nel commento di seguito.
mattst

1
Continuando dal commento sopra ... Ecco i miei dati non elaborati: CRF da 18 a 27 e lo script bash Linux / UNIX che ho scritto per eseguire i codici (nel caso in cui qualcuno desideri eseguire un test simile).
mattst

1
Ecco alcuni grandi post sul blog sugli argomenti, con test condotti per x264 e x265 (i risultati sono, prevedibilmente, molto diversi per ciascuno)
forresthopkinsa
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.