web-dev-qa-db-fra.com

Option de nombre de threads dans FFmpeg pour une conversion plus rapide en h264?

Je dois maximiser la vitesse lors de la conversion de vidéos à l'aide de FFmpeg en h264

  • N'importe quel format d'entrée de vidéos source
  • La machine de l'utilisateur peut avoir n'importe quel nombre de cœurs
  • La consommation d'énergie et de mémoire n'est pas un problème

Bien sûr, il y a tout un tas d'options qui peuvent être modifiées, mais cette question concerne particulièrement le choix du meilleur -thread <count> option. J'essaie de trouver un nombre de threads idéal en fonction de

  • non. de noyaux
  • format vidéo d'entrée
  • des valeurs adaptées au h264 peut-être?
  • autre chose manquée ci-dessus?

Je connais la valeur par défaut -thread 0 suit une approche à un thread par cœur qui est censée être optimale. Mais je ne sais pas si c'est optimisé en temps ou en espace. De plus, sur certains cas de test, j'ai vu plus de threads (disons 4 threads sur ma machine de test dual core) se terminer plus rapidement que par défaut.

Toute autre direction, par exemple, configurer les options w.r.t. fils, vaut la peine d'être poursuivi?

25
S B

J'ai constaté que threads ne fait pas un bon travail en utilisant tous les cœurs, les hyper-threads ne sont pas du tout utilisés. Une solution que je pourrais trouver consiste à exécuter 3 à 4 processus ffmpeg en parallèle, voir: https://superuser.com/questions/538164/how-many-instances-of-ffmpeg-commands-can -i-run-in-parallel/547340 # 54734 Cette approche finit par utiliser tous les cœurs à fond et est plus rapide que l'entrée unique, plusieurs sorties dans une seule option de commande.

14
d33pika

Si votre 'dual-core' a de l'hyperthreading, alors 2x cœurs seraient probablement corrects. Il est peu probable que le gain dépasse le nombre de cœurs virtuels (y compris l'hyperthreading), mais peut-être en raison de problèmes internes dans FFmpeg, cela pourrait être vrai.

2
jesup

J'ai expérimenté à fond avec les threads 0, 6, 12, 24 et cela ne fait aucune différence dans la fréquence d'images, le temps de traitement global ou l'utilisation du processeur. Notez que mon système possède également 12 cœurs physiques. En général, il semble faire un bon travail en utilisant votre puissance de traitement sans spécifier de threads où mes 12 cœurs sont essentiellement utilisés à 98-99% pendant la durée tout en regardant le moniteur supérieur/système.

J'aurais aimé qu'il y ait une solution miracle mais pour l'instant il n'y a pas d'autre moyen d'accélérer les choses car ffmpeg est actuellement très bien optimisé à mon avis. La seule alternative est simplement d'obtenir plus de puissance de calcul ou de faire un traitement distribué.

* Notez que tous mes tests utilisaient la version 3.3.1 de ffmpeg

1
Areeb Soo Yasir