ffmpeg-slow-processing-problem
position_barre latérale : 2
Comment résoudre le retard d'enregistrement du montage vidéo FFmpeg, la réduction de la longueur de la vidéo, le problème du processeur à 100 %
Lors de l'édition (enregistrement) d'une vidéo à l'aide de FFmpeg sur un serveur d'enregistrement vidéo en temps réel, un problème de retard d'enregistrement s'est produit. Les vidéos enregistrées en même temps étaient plus courtes sur certains ordinateurs. Examinons la situation dans laquelle le problème s'est produit, sa cause et le processus de résolution.
Situation problématique
- Il existe plusieurs serveurs pour enregistrer des vidéos en temps réel.
- Serveur basé sur Spring Boot et Kotlin en fonctionnement
- Chaque serveur remplit la fonction d'enregistrement des fichiers vidéo d'entrée à l'aide de FFmpeg
- Les spécifications de chaque serveur sont légèrement différentes pour chaque serveur (n'utilisez pas le même matériel ni la même instance)
FFmpeg est un projet open source développé sous la direction de Michael Niedermayer dans le but de décoder et d'encoder tous les formats vidéo, musique et photo. Dans le détail, c'est un programme qui joue les rôles suivants.
- Open Source : FFmpeg est un outil de traitement vidéo et audio open source, que tout le monde peut utiliser et modifier gratuitement.
- Multiplateforme : FFmpeg fonctionne sous Windows, macOS, Linux et de nombreux autres systèmes d'exploitation.
- Prise en charge de différents formats : FFmpeg prend en charge des centaines de formats. Il permet l'encodage, le décodage, la conversion et le streaming de vidéo, audio, images et autres données multimédia.
- Encodage/décodage vidéo et audio : FFmpeg prend en charge presque tous les principaux codecs vidéo et audio. Cela signifie que les utilisateurs peuvent encoder et décoder des fichiers vidéo et audio dans une variété de formats.
- Streaming : FFmpeg offre la possibilité de diffuser de la vidéo et de l'audio en temps réel. Cela peut être utilisé pour créer des serveurs multimédias ou diffuser du contenu sur des plateformes de streaming en ligne.
- Filtres et effets : FFmpeg fournit une variété de filtres vidéo et audio pour vous aider à éditer et à améliorer votre contenu. Par exemple, vous pouvez redimensionner, recadrer, faire pivoter, corriger les couleurs et supprimer le bruit.
- Interface de ligne de commande : FFmpeg est utilisé via une interface de ligne de commande. Il vous permet d'effectuer une variété de tâches multimédias à l'aide de commandes simples et est idéal pour l'automatisation et le traitement par lots.
- Formulaire bibliothèque : FFmpeg est également disponible sous forme de bibliothèque, permettant à d'autres applications d'utiliser ses fonctionnalités multimédia. Il peut être utilisé dans les logiciels de montage vidéo, les lecteurs multimédias, les serveurs de streaming, etc.
problème
- Sur certains serveurs, l'encodage vidéo apparaît plus court que la durée enregistrée.
- Vérifiez diverses causes pour vérifier le problème et vérifiez les spécifications du serveur et l'utilisation des ressources système telles que le processeur, les graphiques et la mémoire
- Confirmez que le taux d'utilisation des ressources système est différent entre le serveur dans l'environnement problématique et le serveur en fonctionnement normal.
- Normal : L'utilisation du processeur ne change pas de manière significative et celle de la carte graphique augmente de 0 % à 30-40 %.
- Anormal : Le processeur est continuellement utilisé à 100 % et l'utilisation de la carte graphique n'augmente pas.
- Lorsque l'on compare chaque environnement, il existe les différences suivantes
- Normal : Environnement équipé de la carte graphique externe de Nvidia. Les développements existants peuvent également être vérifiés dans cet environnement
- Anormal : serveur équipé uniquement de graphiques intégrés Intel
- Dans un système qui traite la vidéo à 100 % avec le processeur sans utiliser la carte graphique pendant un certain temps, on suppose que la vidéo est raccourcie car le traitement ne peut pas être terminé dans le délai spécifié. **
- Dans le code, la fonction d'enregistrement est configurée pour fonctionner pendant une certaine période de temps.
Résolution
- J'ai cherché un moyen d'utiliser les graphiques intégrés d'Intel.
- Je ne savais pas que les graphiques intégrés d'Intel offraient de très bonnes performances.
- Cependant, je pensais que cela fonctionnerait beaucoup plus efficacement si je partageais le travail plutôt que d'utiliser 100 % du processeur.
ffmpeg -codecs

* À l'aide de la commande ci-dessus, vous pouvez vérifier les codecs disponibles du ffmpeg actuellement installé, comme indiqué ci-dessus.
* Lors de l'enregistrement, chaque serveur utilisait le codec H.264 et les modèles équipés d'une carte graphique Nvidia utilisaient l'encodeur `h264_nvenc`.
* Les modèles équipés uniquement de graphiques intégrés Intel ne peuvent pas utiliser `h264_nvenc`. J'ai utilisé l'encodeur `libx264` ou `libopenh264`, qui étaient des méthodes basées sur le logiciel (utilisant le CPU).
* À l'heure actuelle, lorsque `h264_qsv` était utilisé, **l'utilisation du processeur n'a même pas augmenté de 10 % et le taux d'utilisation des graphiques intégrés précédemment inutilisés a augmenté d'environ 30 %**. **La durée d'enregistrement n'a pas été réduite et correspond désormais à la durée normale.**
* Cependant, comme l'encodeur était différent, la qualité des deux vidéos avec des cartes graphiques différentes semblait quelque peu différente.
* J'ai appris que le fonctionnement normal du logiciel ne peut être attendu que lorsque les caractéristiques matérielles de chaque serveur sont bien utilisées, et que même dans les cas où le matériel est différent, il est nécessaire de vérifier à l'avance.
:::Info
H.264 est un codec standard vidéo annoncé en 2003. Il s'agit d'un codage vidéo plus avancé que le MPEG-4 Part 2 existant, il est donc également connu sous le nom d'AVC (Advanced Video Coding). Non seulement il a un bon taux de compression, mais il offre également une bonne qualité d'image même à un débit binaire relativement faible, il est donc utilisé dans de nombreux services.
:::