J'utilise FFmpeg pour faire une capture d'écran vidéo à partir de l'affichage Xvfb.
Actuellement, je l'invoque avec:
ffmpeg -y -r 15 -g 600 -s 1280x1024x24 -f x11grab -i :100 -vcodec libx264 /tmp/video.mov
Comme j'enregistre la vidéo d'environ 5 sessions Xvfb, mon utilisation du processeur est très élevée et il y a des retards à cause de cela. L'utilisation de la mémoire est également d'environ 300 Mo pour chacun des processus ffmpeg.
Quels paramètres pour ffmpeg dois-je utiliser pour minimiser l'utilisation des ressources informatiques (en particulier le processeur et la mémoire) lors de la capture d'écran vidéo?
la source
ffmpeg
avec le-preset superfast
paramètre (je n'ai pas essayé-crf
). Il prend moins de ressources dans ce cas et produit des vidéos de bonne taille.-crf 23
est utilisé par défaut si vous ne déclarez pas de valeur, mais de toute façon si celasuperfast
vous suffit, le problème est peut-être résolu.Il est préférable de se concentrer sur l'utilisation de différentes options ffmpeg qui permettront d'obtenir le même résultat d'une manière qui utilise moins de ressources. Cela dit, il existe des moyens d'utiliser moins de ressources si vous avez vraiment besoin d'accomplir une chose spécifique avec ffmpeg et qu'il utilise trop de ressources.
Vous pouvez diminuer la priorité du
ffmpeg
processus CPU de:nice
commande pour modifier la priorité du processus:nice -n 8 ffmpeg -y -r 15 -g 600 -s 1280x1024x24 -f x11grab -i :100 -vcodec libx264 /tmp/video.mov
. Sous Linux, le numéro de priorité (lenice
format de la commande estnice -n <priority> <command>
) varie de -20 à 20. Plus l'entier est grand, plus la priorité est faible ; neutre est 0. Si vous utilisez la commande que je vous ai donnée et que vous la définissez sur 8, le processeur donnera au processus moins de temps, ce qui semble être moins de "puissance". Si ce nombre est trop élevé ou deux bas, bien sûr, vous pouvez le changer.ffmpeg
cours d'exécution, ouvrez le Moniteur système. Faites défiler jusqu'au processus nomméffmpeg
, cliquez dessus avec le bouton gauche pour le sélectionner, faites un clic droit dessus et définissez la priorité sur "Faible" ou "Très faible".Si vous vous inquiétez également de l'utilisation de la mémoire, sachez qu'il n'est pas possible de dire à un processus de ne prendre que trop de mémoire et de s'exécuter. Le noyau contrôle automatiquement l'allocation de mémoire pour les processus. Il existe un moyen de mettre en cage les processus, avec le
timeout
script , de sorte que lorsqu'un processus et tout processus enfant prennent trop de mémoire (une limite que vous avez définie), ils soient arrêtés en toute sécurité et une notification s'affiche. Cependant, si un processus ne dispose que de tant de mémoire (disons par le noyau) et qu'il demande plus de mémoire qu'il ne peut pas en avoir, il se bloquera.Quelques informations utiles à savoir:
En utilisant les connaissances de Cgroups, vous pouvez faire beaucoup de choses amusantes comme contrôler la permutabilité d'un processus.
la source
-re (entrée) Lire l'entrée à la fréquence d'images native. Principalement utilisé pour simuler un périphérique de capture ou un flux d'entrée en direct (par exemple lors de la lecture d'un fichier). Ne doit pas être utilisé avec des périphériques de capture réels ou des flux d'entrée en direct (où cela peut entraîner une perte de paquets). Par défaut, ffmpeg tente de lire les entrées le plus rapidement possible. Cette option ralentit la lecture des entrées à la fréquence d'images native des entrées. Il est utile pour la sortie en temps réel (par exemple, la diffusion en direct).
la source