Die FFMPEG-Ausgabe ist blockartig

Ich versuche, die einzelnen Frames aus einem rohen AVC-Videostream zu extrahieren. Ich mache das über den folgenden ffmpeg-Befehl:ffmpeg -q 1 -i video_test.avc -f image2 frames/frames_%04d.jpg

Das Problem, auf das ich stoße, ist, dass die ersten Frames gut aussehen. Ich füge unten ein Beispiel hinzu.Beispiel für guten Rahmen

Die extrahierten Frames werden dann zunehmend schlechter und bis ich zum 17. Frame komme, sind sie wirklich blockig.Beispiel für ein blockiges Bild

Sie erhalten das Rohvideo von diesem Link .

Gibt es eine Option, die ich vermisse? Ich habe festgestellt, dass FFMPEG auf meinem Mac wie erwartet funktioniert und schöne Frames generiert, aber FFMPEG auf meinem Produktionsserver, auf dem Ubuntu ausgeführt wird, weist dieses Problem auf.

Verbessert es sich jedes Mal, wenn ein Schlüsselbild erreicht wird, oder verschlechtert es sich auf unbestimmte Zeit?
Sobald es den Blocky-Zustand erreicht hat, bleibt es auf unbestimmte Zeit in diesem Blocky-Zustand. Es wird nicht schlimmer.
Haben Sie verschiedene Versionen von FFMPEG ausprobiert, um festzustellen, ob es sich nur um einen Fehler in der jeweiligen Version handelt? Tut mir leid, ich werfe nur zufällige Gedanken zur Fehlerbehebung raus. Mir ist nichts spezielles zu diesem Problem bekannt.
Ich verwende die Binärdateien aus dem Repository, das auf ffmpeg.org/download.html aufgeführt ist . Dies wird ziemlich häufig aktualisiert und das letzte Update war am 15. Juli. Ich werde versuchen, es morgen aus dem Quellcode zu erstellen und zu sehen, ob sich dadurch etwas ändert.

Antworten (1)

Optionsplatzierung ist wichtig

Gibt es eine Option, die ich vermisse?

Nein, aber die Platzierung von Optionen ist wichtig. Optionen vor der Eingabe gelten für die Eingabe und Optionen vor der Ausgabe gelten im Allgemeinen für die Ausgabe. Die Ausnahme sind globale Optionen. Weitere Einzelheiten zur Optionsplatzierung finden Sie in der FFmpeg-Übersicht und der FFmpeg-Beschreibung .

Daher müssen Sie Ihre Option -q(Alias ​​für ) verschieben:-qscale

ffmpeg -i video_test.avc -q:v 2 frames/frames_%04d.jpg
  • -f image2ist hier überflüssig, da ffmpeg weiß, dass Ihre Ausgaben Bilder sind.
  • Ein vernünftiger Bereich für -q:vden Encoder mjpegist 2-5; niedriger ist höhere Qualität.
  • Es wird empfohlen, explizit anzugeben, auf welchen Stream Sie sich anwenden möchten, -qda ffmpeg nicht wissen kann, ob es auf Video oder Audio angewendet werden soll, also verwenden Sie in Ihrem Fall -q:v. Dies ist eine bewährte Vorgehensweise, obwohl es für Ihre Eingabe keine Rolle spielt, da Sie kein Audio haben.

Ein gefälschtes "ffmpeg"

Ich habe festgestellt, dass FFMPEG auf meinem Mac wie erwartet funktioniert und schöne Frames generiert, aber FFMPEG auf meinem Produktionsserver, auf dem Ubuntu ausgeführt wird, weist dieses Problem auf.

Ubuntu verwendet kein FFmpeg mehr:

Da ich die Fork nicht verwende, funktioniert meine Antwort möglicherweise nicht für Sie.

ffmpeg erhalten

Die FFmpeg-Entwicklung ist sehr aktiv und es ist immer eine gute Idee, eine aktuelle Version zu verwenden. Zwei Hauptwege, um es zu bekommen, sind:

Es war die Platzierung der -q 1, die es getan hat. Danke.