Combien de threads ffmpeg utilise-t-il par défaut?


47

Je vois qu'il existe une -threads <count>option de ligne de commande dans ffmpeg. Quelle est la valeur par défaut de cette option?

Réponses:


24

cela dépend du codec utilisé, de la version de ffmpeg et du nombre de cœurs de votre processeur. Parfois, il s'agit simplement d'un fil par noyau. Parfois, c'est plus complexe comme:

Avec libx264, les cœurs x 1,5 pour les threads de trame et les cœurs x 1 pour les threads de tranches.


Merci. Avez-vous une référence aux valeurs par défaut de certains codecs standard pris en charge par ffmpeg?
Edward Dale

6
Ne comptez pas dessus. Mon ffmpeg 0.7.8 sur Linux utilise 1 thread par défaut, peu importe quoi.
Barafu Albino

Quelle valeur peut être utilisée pour obtenir le meilleur résultat? PS J'utilise FFMpeg dans un cadre Android.
Killer

23

À partir de 2014, il utilise un nombre optimal.

Vous pouvez le vérifier sur un ordinateur multicœur en examinant la charge du processeur (Linux:, topWindows: gestionnaire de tâches) avec différentes options de ffmpeg:

  • -threads 0 (optimal);

  • -threads 1 (à filetage unique);

  • -threads 2 (2 threads pour un processeur Intel Core 2 Duo, par exemple);

  • none (la valeur par défaut, également optimale).

Édition 2015: sur un processeur à 12 cœurs, certaines commandes ffmpeg ont Linux topaffichant au plus 200% cpu (seulement 2 cœurs), quel que soit le nombre attribué -threads. Donc, la valeur par défaut peut toujours être optimale dans le sens de "aussi bon que ce que le binaire ffmpeg peut obtenir", mais pas optimale dans le sens de "exploiter pleinement mon processeur leet".


1
Notez que cela ne semble être vrai que pour l'encodage, pas pour le traitement général. S'il ne produit pas réellement de trames de sortie, il ne sera pas parallélisé. Par exemple, si vous désagitez à partir de 02h00, le parallélisme ne sera disponible qu'à partir de 02h00, mais tout ce qui se présentera jusqu'à 02h00 devra toujours être traité en série.
Mehrdad

6

En 2015 sur Ubuntu 14.04 avec ffmpeg 0.8.10-6, il utilisait 1 cœur sur un système à 4 coeurs. htopa montré cela; un seul cœur a été utilisé et j'ai obtenu un taux de conversion de 16 ips pour une vidéo FullHD.

En utilisant -threads 4tous mes cœurs de processeur aller à 100% et j'ai eu un taux de conversion de 47 fps.

J'ai utilisé la commande suivante:

$ ffmpeg -i foo.mp4 -y -target pal-dvd -aspect 16:9 dvd-out.mpg

6

Certaines de ces réponses sont un peu anciennes, et je voudrais juste ajouter qu'avec mon ffmpeg 4.1codage avec libx264, tous les 6 cœurs / 12 fils de mon système Ryzen 5 2600X ont été maximisés sans aucun -threadargument.


J'ai le 1800X et j'observe une utilisation pas tout à fait de 20% répartie sur 16 threads, mais j'utilise aussi quelques arguments optionnels: -vcodec libx264 -profile:v high444 -refs 14 -preset ultrafast -crf 18 -tune fastdecodec'est donc quelques variables à isoler. Ajouter -threads 12n'a eu aucun effet.
Elaskanator

3

Je jouais avec la conversion dans une VM CentOS 6.5 (Ryzen 1700 8c / 16t - vm affecté à 12 cœurs sur 16). Les expériences avec des films 480p ont eu les effets suivants:

Option de fil / Taux de conversion (i / s @ 60 s)

(none/default)/130fps
-threads 1/70fps
-threads 2/120fps
-threads 4/185fps
-threads 6/228fps
-threads 8/204fps
-threads 10/181fps

La partie intéressante était le chargement du processeur (en utilisant htoppour le regarder). N'utilisant
aucune -threadsoption, nous nous sommes retrouvés dans la plage des 130 ips avec une charge répartie sur tous les cœurs à un niveau de charge faible.
En utilisant exactement 1 thread, le noyau était chargé à 100%. Toute autre utilisation a entraîné une autre situation de charge dispersée.

Comme vous pouvez le constater, il existe également un risque de rendements décroissants. Vous devez donc ajuster l’option -threads pour votre machine. Pour ma configuration en particulier, l’utilisation de -threads 6 (sur une machine à 12 coeurs) donnait le meilleur FPS lors de la conversion de la vidéo (de h264 à x264 à un débit différent pour forcer la conversion) et renvoyait en fait à mesure que j’ai jeté un plus grand nombre de threads. il.

Cela aurait également pu être un problème de mémoire: 1 Go seulement avait été attribué à la machine virtuelle. Je peux modifier cela et voir si cela change quelque chose. Néanmoins, cela montre que l’utilisation de cette -threadsoption peut augmenter les performances. Par conséquent, effectuez des tests sur votre machine particulière à différents niveaux pour trouver la configuration idéale.


Pourriez-vous s'il vous plaît ajouter ce que vous entendez par "convertir"? Idéalement, la commande exacte.
Ondra Žižka

4.1.3 sur Ubuntu 18.04 et résultat très similaire. La valeur par défaut était "faible charge sur tous les cœurs".
Roel Van de Paar le

Je suppose que la raison pour laquelle vous avez obtenu 6 threads de manière optimale sur la machine "12 core" (cpu non spécifié, différent du premier répertorié) est que 6 peut avoir été le nombre réel de cœurs et 12 le nombre de threads?
Roel Van de Paar le

1

en supposant que le threading soit activé, il attribue un nombre de cœurs 1,5x.


1,5 x nombre de cœurs pour les fils du cadre. 1 x nombre de cœurs pour les fils de coupe. Ceci est spécifique à (lib) x264. Je ne sais pas quelle est l'allocation pour les autres encodeurs.
llogan

@LordNeckbeard Comment basculer entre le filetage de trame et le filetage de tranche!?
Dr.jacky

1
@ Mr.Hyde Probablement avec -x264-params sliced-threads=1. Ou via l'utilisation de -tune zerolatency.
llogan
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.