Travailler sur un site tube . J'utilise des vidéos via ffmpeg sur un serveur dédié linux à convertir à mp4 .
Les spécifications du serveur:
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 60
Stepping: 3
CPU MHz: 3491.749
BogoMIPS: 6983.49
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 8192K
NUMA node0 CPU(s): 0-7
Lors des tests, le problème est que même si vous ne faites que 4-5 à la fois, le serveur charge en flèche jusqu'à environ 36 en moyenne. Il ne s'agit que d'une seule personne. J'imagine que lors de son ouverture, de nombreuses personnes téléchargeront simultanément.
Il semble que ffmpeg tente d'utiliser toutes les ressources disponibles par conversion.
J'ai entendu dire qu'il est possible de modifier un paramètre de threads, mais je ne le trouve pas. J'ai un serveur de 8 cpu. Il est uniquement utilisé pour les conversions. Le meilleur paramètre compris entre 2 et 4 est donc le meilleur. Je peux le tester.
Mais comment changer ce réglage? Tout ce que je vois en ligne traite de ce paramètre, mais pas des étapes pour le changer.
Le drapeau d'option que vous voulez est vraiment juste -threads
et vous l'utiliseriez comme ceci (pour un seul thread):
ffmpeg -i somefile.wmv -c:a libfdk_aac -c:v libx264 -threads 1 transcoded.mp4
Cependant, il existe de nombreuses subtilités qui augmenteront la charge de votre serveur et le temps d’exploitation, telles que le redimensionnement, l’application de filtres et la qualité/débit d’image finale - sans oublier le fait que certaines architectures VM lisent tout écrire deux fois (une fois de manière native et une fois de manière virtuelle !!!)
Voici quelques astuces pour augmenter votre vitesse:
-threads 0
Quoi que vous fassiez, tenez vos utilisateurs informés du processus de transcodage, car cela prend du temps. (I.J.T.T.)
[commande modifiée pour refléter le commentaire de LordNeckbeard]
C'est peut-être un peu vieux, mais cela semble être une tâche parfaite pour un conteneur comme docker.
full horsepower
(comme l'appelait denjello)Vous pouvez maintenant limiter la quantité de ressources qu'une instance ffmpeg peut consommer sans même utiliser les options de ligne de commande ffmpeg. Et pas seulement le processeur, mais aussi la mémoire et les IO.
Encore plus: peut-être que vous avez différentes tâches qui peuvent s'exécuter en arrière-plan, vous ne vous souciez pas du temps qu'elles prennent et que vous avez des tâches qui devraient s'exécuter rapidement, afin que vous puissiez peser différemment.
Voir https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources
Il existe déjà une image prédéfinie de ffmpeg sur github: https://github.com/jrottenberg/ffmpeg
docker run jrottenberg/ffmpeg \
-i http://url/to/media.mp4 \
-stats \
$ffmpeg_options - > out.mp4
Une seule conversion sera probablement plus lente en raison de la surcharge, mais si vous exécutez plusieurs instances simultanément, cela pourrait représenter un avantage considérable. Tout cela évoluera très bien, sans parler de la sécurité améliorée, car chaque tâche est isolée du système d'exploitation sous-jacent.