Zum Hauptinhalt springen

ffmpeg-slow-processing-problem


So lösen Sie das Problem mit der Aufnahmeverzögerung bei der FFmpeg-Videobearbeitung, der Reduzierung der Videolänge und dem CPU-100-Prozent-Problem

Beim Bearbeiten (Aufzeichnen) von Videos mit FFmpeg auf einem Echtzeit-Videoaufzeichnungsserver ist ein Problem mit der Aufzeichnungsverzögerung aufgetreten. Gleichzeitig aufgenommene Videos waren auf einigen Computern kürzer. Werfen wir einen Blick auf die Situation, in der das Problem aufgetreten ist, die Ursache dafür und den Lösungsprozess.

Problemsituation

  • Es gibt mehrere Server zum Aufzeichnen von Echtzeitvideos.
    • Spring Boot- und Kotlin-basierter Server in Betrieb
  • Jeder Server übernimmt die Funktion, Eingabevideodateien mit FFmpeg aufzuzeichnen
  • Die Spezifikationen jedes Servers unterscheiden sich geringfügig (verwenden Sie nicht dieselbe Hardware oder dieselbe Instanz).

:::die Info FFmpeg ist ein Open-Source-Projekt, das unter der Leitung von Michael Niedermayer mit dem Ziel entwickelt wurde, alle Video-, Musik- und Fotoformate zu dekodieren und zu kodieren. Im Detail handelt es sich um ein Programm, das die folgenden Rollen übernimmt.

  1. Open Source: FFmpeg ist ein Open-Source-Video- und Audioverarbeitungstool, das jeder kostenlos verwenden und ändern kann.
  2. Multiplattform: FFmpeg läuft auf Windows, macOS, Linux und vielen anderen Betriebssystemen.
  3. Unterstützung für verschiedene Formate: FFmpeg unterstützt Hunderte von Formaten. Es ermöglicht die Kodierung, Dekodierung, Konvertierung und das Streaming von Video-, Audio-, Bild- und anderen Multimediadaten.
  4. Video- und Audio-Kodierung/Dekodierung: FFmpeg unterstützt fast alle wichtigen Video- und Audio-Codecs. Dies bedeutet, dass Benutzer Video- und Audiodateien in verschiedenen Formaten kodieren und dekodieren können.
  5. Streaming: FFmpeg bietet die Möglichkeit, Video und Audio in Echtzeit zu streamen. Dies kann zum Aufbau von Medienservern oder zur Bereitstellung von Inhalten für Online-Streaming-Plattformen verwendet werden.
  6. Filter und Effekte: FFmpeg bietet eine Vielzahl von Video- und Audiofiltern, die Ihnen bei der Bearbeitung und Verbesserung Ihrer Inhalte helfen. Sie können beispielsweise die Größe ändern, zuschneiden, drehen, die Farbe korrigieren und Rauschen entfernen.
  7. Befehlszeilenschnittstelle: FFmpeg wird über eine Befehlszeilenschnittstelle verwendet. Es ermöglicht Ihnen die Ausführung vielfältiger Multimedia-Aufgaben mit einfachen Befehlen und eignet sich ideal für die Automatisierung und Stapelverarbeitung.
  8. Bibliotheksform: FFmpeg ist auch in Bibliotheksform verfügbar, sodass andere Anwendungen seine Multimediafunktionen nutzen können. Es kann in Videobearbeitungssoftware, Mediaplayern, Streaming-Servern usw. verwendet werden. :::

Problem

  • Auf bestimmten Servern erscheint die Videokodierung kürzer als die aufgezeichnete Länge.
    • Überprüfen Sie verschiedene Ursachen, um das Problem zu überprüfen und Serverspezifikationen und Systemressourcennutzung wie CPU, Grafik und Speicher zu überprüfen.
  • Stellen Sie sicher, dass die Systemressourcennutzungsrate zwischen dem Server in der Problemumgebung und dem Server im Normalbetrieb unterschiedlich ist.
    • Normal: Die CPU-Auslastung ändert sich nicht wesentlich und die Grafikkartenauslastung steigt von 0 % auf 30–40 %.
    • Ungewöhnlich: Die CPU wird kontinuierlich zu 100 % ausgelastet und die Grafikkartenauslastung erhöht sich nicht.
  • Beim Vergleich der einzelnen Umgebungen gibt es folgende Unterschiede
    • Normal: Umgebung, die mit der externen Grafikkarte von Nvidia ausgestattet ist. Auch bestehende Entwicklungen können in diesem Umfeld überprüft werden
    • Ungewöhnlich: Server, der nur mit integrierter Intel-Grafik ausgestattet ist
  • In einem System, das Videos zu 100 % mit der CPU verarbeitet, ohne die Grafikkarte für einen bestimmten Zeitraum zu verwenden, wird davon ausgegangen, dass das Video gekürzt wird, da die Verarbeitung nicht innerhalb der angegebenen Zeit abgeschlossen werden kann. **
    • Im Code ist die Aufnahmefunktion auf einen bestimmten Zeitraum eingestellt.

Auflösung

  • Ich habe nach einer Möglichkeit gesucht, die integrierte Grafik von Intel zu nutzen.
    • Ich wusste nicht, dass die integrierte Grafik von Intel eine sehr gute Leistung bietet.
    • Allerdings dachte ich, es würde viel effizienter funktionieren, wenn ich die Arbeit aufteile, anstatt 100 % der CPU zu nutzen.

ffmpeg-Codecs „

Bild

  • Mit dem obigen Befehl können Sie die verfügbaren Codecs des aktuell installierten ffmpeg überprüfen, wie oben gezeigt.
  • Bei der Aufnahme verwendete jeder Server den H.264-Codec und Modelle, die mit einer Nvidia-Grafikkarte ausgestattet waren, verwendeten den „h264_nvenc“-Encoder.
  • Modelle, die nur mit integrierter Intel-Grafik ausgestattet sind, können „h264_nvenc“ nicht verwenden. Ich habe den Encoder „libx264“ oder „libopenh264“ verwendet, bei dem es sich um SW-basierte Methoden (mit CPU) handelte.
  • Zu diesem Zeitpunkt, als „h264_qsv“ verwendet wurde, ** stieg die CPU-Auslastung nicht einmal um 10 %, und die Nutzungsrate zuvor nicht verwendeter integrierter Grafiken stieg um etwa 30 % **. Die Aufnahmezeit wurde nicht verkürzt und hat jetzt die normale Länge.
    • Aufgrund des unterschiedlichen Encoders schien die Qualität der beiden Videos mit unterschiedlichen Grafikkarten jedoch etwas unterschiedlich zu sein.
  • Ich habe die Erkenntnis gewonnen, dass ein normaler SW-Betrieb nur dann zu erwarten ist, wenn die HW-Eigenschaften jedes Servers gut genutzt werden, und dass selbst in Fällen, in denen die HW unterschiedlich ist, eine vorherige Überprüfung erforderlich ist.

:::die Info H.264 ist ein 2003 angekündigter Videostandard-Codec. Es handelt sich um eine fortschrittlichere Videokodierung als das bestehende MPEG-4 Teil 2 und wird daher auch als AVC (Advanced Video Coding) bezeichnet. Es verfügt nicht nur über eine gute Komprimierungsrate, sondern auch bei einer relativ niedrigen Bitrate über eine gute Bildqualität und wird daher in vielen Diensten verwendet. :::