Vedo che c'è -threads <count>
un'opzione della riga di comando in ffmpeg. Qual è il valore predefinito di questa opzione?
Vedo che c'è -threads <count>
un'opzione della riga di comando in ffmpeg. Qual è il valore predefinito di questa opzione?
Risposte:
dipende dal codec utilizzato, dalla versione di ffmpeg e dal numero di core della CPU. A volte è semplicemente un thread per core. A volte è più complesso come:
Con libx264 è core x 1,5 per i thread di frame e core x 1 per i thread di sezioni.
A partire dal 2014, utilizza un numero ottimale.
Puoi verificarlo su un computer multi-core esaminando il carico della CPU (Linux:, top
Windows: task manager) con diverse opzioni per ffmpeg:
-threads 0
(ottimale);
-threads 1
(Single-threaded);
-threads 2
(2 thread per esempio un Intel Core 2 Duo);
nessuno (impostazione predefinita, anche ottimale).
Modifica 2015: su una CPU a 12 core, alcuni comandi di ffmpeg hanno Linux che top
mostra al massimo il 200% di CPU (solo 2 core), indipendentemente dal numero a cui viene assegnato -threads
. Quindi il valore predefinito può essere comunque ottimale nel senso di "buono come può ottenere questo binario ffmpeg", ma non ottimale nel senso di "sfruttare appieno la mia CPU leet".
Nel 2015 su Ubuntu 14.04 con ffmpeg 0.8.10-6, ha usato 1 core su un sistema a 4 core.
htop
ha mostrato questo; è stato utilizzato solo un core e ho ottenuto un tasso di conversione di 16 fps per un video FullHD.
Utilizzando -threads 4
fatto tutti i miei core della CPU vanno al 100% e ho ottenuto un tasso di conversione di 47 fps.
Ho usato il seguente comando:
$ ffmpeg -i foo.mp4 -y -target pal-dvd -aspect 16:9 dvd-out.mpg
Alcune di queste risposte sono un po 'vecchie e vorrei solo aggiungere che con il mio ffmpeg 4.1
, codificando con libx264
, tutti i 6 core / 12 thread del mio sistema Ryzen 5 2600X sono stati massimizzati senza alcun -thread
argomento.
-vcodec libx264 -profile:v high444 -refs 14 -preset ultrafast -crf 18 -tune fastdecode
quindi sono alcune variabili da isolare. L'aggiunta -threads 12
non ha avuto alcun effetto.
Stavo giocando con la conversione in una VM CentOS 6.5 (Ryzen 1700 8c / 16t - vm assegnato 12 di 16 core). Gli esperimenti con i film a 480p hanno compensato quanto segue:
Opzione discussione / Tasso di conversione (fps a 60 secondi)
(none/default)/130fps
-threads 1/70fps
-threads 2/120fps
-threads 4/185fps
-threads 6/228fps
-threads 8/204fps
-threads 10/181fps
La parte interessante è stata il caricamento della CPU (usando htop
per guardarlo).
L'utilizzo di nessuna -threads
opzione è terminato alla gamma di 130 fps con carico distribuito su tutti i core a basso carico.
Usando 1 thread ha fatto esattamente questo, ha caricato un core al 100%. L'uso di qualcos'altro ha comportato un'altra situazione di carico diffuso.
Come puoi vedere, c'è anche un punto di rendimenti decrescenti, quindi dovresti regolare l'opzione -threads per la tua macchina particolare. Per la mia configurazione in particolare, l'uso di -threads 6 (su una macchina a 12 core) ha prodotto i migliori FPS durante la conversione del video (da h264 a x264 a un bitrate diverso per forzare una conversione) e restituisce effettivamente diminuito più thread ho lanciato in esso.
Potrebbe anche essere stato un problema di memoria: aveva solo 1 GB assegnato alla VM. Potrei modificarlo e vedere se questo cambia qualcosa. Tuttavia, mostra che l'utilizzo -threads
dell'opzione può aumentare le prestazioni, quindi esegui alcuni test sulla tua macchina specifica a diversi livelli per trovare il punto debole delle tue configurazioni.
supponendo che il threading sia abilitato, ha assegnato un numero 1,5x di core.
-x264-params sliced-threads=1
. O tramite l'utilizzo di -tune zerolatency
.