80 votes

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

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

51voto

Camille Goudeseune Points 1946

Depuis 2014, il utilise un nombre optimal.

Vous pouvez vérifier cela sur un ordinateur multi-core en examinant la charge du CPU (Linux : top Windows : gestionnaire de tâches) avec différentes options de ffmpeg :

  • -threads 0 (optimal) ;

  • -threads 1 (single-threaded) ;

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

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

Edition 2015 : sur un CPU à 12 cœurs, certaines commandes ffmpeg ont Linux top montrant au maximum 200% de cpu (seulement 2 cœurs), quel que soit le nombre donné à -threads . Ainsi, la valeur par défaut peut être optimale dans le sens de "aussi bon que ce binaire ffmpeg peut l'être", mais pas optimale dans le sens de "exploiter pleinement mon processeur leet".

39voto

mOlind Points 590

Cela dépend du codec utilisé, de la version de ffmpeg et du nombre de cœurs de votre CPU. Parfois, il s'agit simplement d'un thread par cœur. Parfois, c'est plus complexe :

Avec libx264, il s'agit de cœurs x 1,5 pour les threads de l'image et de cœurs x 1 pour les threads de la tranche.

15voto

Mattwmaster58 Points 261

Certaines de ces réponses sont un peu anciennes, et je voudrais juste ajouter qu'avec mon ffmpeg 4.1 , codage avec libx264 Les 6 cores/12 threads de mon système Ryzen 5 2600X ont été exploités au maximum sans aucun problème. -thread argument.

10voto

cweiske Points 1522

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

Utilisation de -threads 4 a fait passer tous mes cœurs de CPU à 100% et j'ai obtenu 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

7voto

Bill Rookard Points 71

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

Option de filage/Taux de conversion (fps @ 60 secs)

(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 la charge du CPU (en utilisant htop pour le regarder).
Ne pas utiliser -threads L'option s'est retrouvée dans la gamme des 130fps avec une charge répartie sur tous les noyaux à un niveau de charge faible.
L'utilisation d'un thread a fait exactement cela, en chargeant un cœur à 100%. L'utilisation de n'importe quel autre thread a entraîné une autre situation de charge étalée.

Comme vous pouvez le voir, il y a aussi un point de rendement décroissant, donc vous devrez ajuster l'option -threads pour votre machine particulière. Pour ma configuration spécifique, l'utilisation de l'option -threads 6 (sur une machine à 12 cœurs) a permis d'obtenir la meilleure FPS lors de la conversion de la vidéo (de h264 à x264 à un bitrate différent pour forcer une conversion) et les rendements diminuent au fur et à mesure que j'ajoute des threads.

Cela aurait pu être un problème de mémoire aussi - il n'y avait que 1GB assigné à la VM. Je peux modifier cela et voir si cela change quelque chose. Néanmoins, cela montre que l'utilisation de l'option -threads peut augmenter les performances. Effectuez donc quelques tests sur votre machine à différents niveaux pour trouver le point idéal pour votre configuration.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X