avconv sur plusieurs threads

9

Est-il possible d'exécuter des travaux sur plusieurs processeurs ou threads pour accélérer avconv?
Y a-t-il une fonctionnalité en cours, sinon je me demande pourquoi?

Shubham Chaudhary
la source

Réponses:

11

Vous recherchez l' option -threads d'avconv. Le réglage le plus sûr serait:

 -threads auto

mais vous pouvez également y définir un entier si vous voulez expérimenter un peu. Un FFmpeg moderne (maintenant le standard dans Ubuntu) définit cela auto par défaut comme on le voit dans cette section des pages de manuel 'ffmpeg-all':

threads integer (decoding/encoding,video)

Set the number of threads to be used, in case the selected
codec implementation supports multi-threading.

  Possible values:

     auto, 0
     automatically select the number of threads to set

 Default value is auto.

Remarque 2 points importants:

  1. Ce paramètre n'aura d'effet que si le codec choisi prend en charge le multithread
  2. Il est possible de définir le nombre de threads pour les flux individuels plutôt que de simplement essayer un paramètre de thread global
andrew.46
la source
1
Corrigez-moi si vous avez une source contraire, mais j'ai l'impression qu'Avconv et avplay utilisent toujours -threads auto par défaut, sauf indication contraire. Le moniteur système semble sauvegarder cela.
Elder Geek
1
Je crois que cela dépend du codec utilisé pour le transcodage. Cela pourrait être formellement testé, ce qui en ferait certainement un test intéressant. Les informations que j'ai pu trouver sur le problème en ligne ne sont pas particulièrement utiles. Un autre problème serait la version de FFmpeg qui est utilisée, les options de threads ont été utilisées différemment dans les anciennes versions ...
andrew.46
1
Oui. FFmpeg et avconv sont allés dans des directions quelque peu différentes depuis le fork. Des recherches plus poussées indiquent que -threads auto est la valeur par défaut dans avconv si vous utilisez l'un des préréglages sur la ligne de commande.
Elder Geek
3

Si vous effectuez un transcodage audio de nombreux fichiers, essayez d'utiliser GNU Parallel. Il prendra une liste de fichiers en entrée et les traitera en parallèle en fonction du nombre de cœurs de votre système. Par exemple, voici un exemple bash qui convertira la musique au format audio opus en parallèle en utilisant ffmpeg.

find ./* -depth -type f -name \*.ogg -o -name \*.flac -o -name \*.m4a -o -name \*.mp3 -o -name \*.ogg | parallel -j+0 --gnu nice -n 19 ffmpeg -i "{}" -acodec libopus "{.}.opus" -loglevel quiet
mmstick
la source