Ich verwende FFmpeg, um Video-Screenshots von der Xvfb-Anzeige zu machen.
Zur Zeit rufe ich es auf mit:
ffmpeg -y -r 15 -g 600 -s 1280x1024x24 -f x11grab -i :100 -vcodec libx264 /tmp/video.mov
Da ich Videos von ungefähr 5 Xvfb-Sitzungen aufzeichne, ist meine CPU-Auslastung sehr hoch und es treten Verzögerungen auf. Die Speicherauslastung für jeden ffmpeg-Prozess beträgt ungefähr 300 MB.
Welche Parameter für ffmpeg sollten verwendet werden, um die Auslastung der Computerressourcen (insbesondere von CPU und Arbeitsspeicher) bei der Erstellung von Video-Screenshots zu minimieren?
quelle
ffmpeg
mit-preset superfast
parameter auf (habe ich nicht ausprobiert-crf
). In diesem Fall werden weniger Ressourcen benötigt und ausreichend große Videos erstellt.-crf 23
wird standardmäßig verwendet, wenn Sie keinen Wert deklarieren. Wenn diessuperfast
jedoch für Sie ausreicht, ist das Problem möglicherweise behoben.Es ist besser, sich auf die Verwendung verschiedener ffmpeg-Optionen zu konzentrieren, die auf eine Weise, die weniger Ressourcen verbraucht, dasselbe Ergebnis erzielen. Es gibt jedoch Möglichkeiten, weniger Ressourcen zu verwenden, wenn Sie mit ffmpeg wirklich eine bestimmte Aufgabe ausführen müssen und zu viele Ressourcen verwendet werden.
Sie können die Priorität des
ffmpeg
CPU-Prozesses verringern :nice
Befehl die Priorität des Prozesses ändern:nice -n 8 ffmpeg -y -r 15 -g 600 -s 1280x1024x24 -f x11grab -i :100 -vcodec libx264 /tmp/video.mov
. Unter Linux reicht die Prioritätsnummer (dasnice
Befehlsformat istnice -n <priority> <command>
) von -20 bis 20. Je größer die Ganzzahl, desto niedriger die Priorität. Neutral ist 0. Wenn Sie den Befehl verwenden, den ich Ihnen gegeben habe, und ihn auf 8 setzen, gibt die CPU dem Prozess weniger Zeit, was weniger "Leistung" zu sein scheint. Wenn diese Zahl zu hoch oder zwei zu niedrig ist, können Sie sie natürlich ändern.ffmpeg
läuft, öffnen Sie den Systemmonitor. Scrollen Sie nach unten zu dem benannten Prozessffmpeg
, klicken Sie mit der linken Maustaste darauf, klicken Sie mit der rechten Maustaste darauf und setzen Sie die Priorität auf "Niedrig" oder "Sehr niedrig".Wenn Sie auch über die Speichernutzung besorgt sind, wissen Sie, dass es nicht möglich ist, einem Prozess anzuweisen, nur so viel Speicher zu belegen und trotzdem auszuführen. Der Kernel steuert automatisch die Speicherzuweisung für Prozesse. Es gibt eine Möglichkeit, Prozesse mit dem
timeout
Skript zwischenzuspeichern , sodass Prozesse und untergeordnete Prozesse, die zu viel Speicher belegen (ein von Ihnen festgelegtes Limit), sicher beendet werden und eine Benachrichtigung angezeigt wird. Wenn einem Prozess jedoch nur so viel Speicher zugewiesen wird (etwa vom Kernel) und mehr Speicher angefordert wird, als er nicht haben kann, stürzt er ab.Einige hilfreiche Informationen:
Mit dem Wissen über Cgroups können Sie viele unterhaltsame Dinge tun, beispielsweise die Kontrolle über den Austausch eines Prozesses.
quelle
-re (Eingabe) Liest die Eingabe mit der nativen Framerate. Wird hauptsächlich verwendet, um ein Grab-Gerät oder einen Live-Eingabestream zu simulieren (z. B. beim Lesen aus einer Datei). Sollte nicht mit tatsächlichen Grab-Geräten oder Live-Eingabestreams verwendet werden (wo dies zu Paketverlust führen kann). Standardmäßig versucht ffmpeg, die Eingaben so schnell wie möglich zu lesen. Diese Option verlangsamt das Lesen der Eingaben auf die native Bildrate der Eingaben. Es ist nützlich für die Ausgabe in Echtzeit (z. B. Live-Streaming).
quelle