Keyframe aus Video mit ffmpeg extrahieren

Ich muss ein Thumbnail für Videos für eine Webanwendung generieren und mache das derzeit mit diesem Befehl:

ffmpeg -ss <seconds> -i <input file> -vframes 1 -y <output file>

Ziemlich einfach und macht den Job. Aber natürlich sind die Rahmen manchmal nicht sehr "interessant".

Zum Beispiel ist das Video manchmal schwarz geworden, wenn sich die Szene ändert, oder es könnte etwas Langweiliges sein, wie z. B. ein laufender Abspann oder ähnliches.

Ich brauche eine Art Algorithmus, um etwas Interessantes aus dem Video zu extrahieren und im Wesentlichen die langweiligen Teile herauszufiltern.

Gibt es irgendetwas in FFmpeg, das dies erleichtern könnte?

Wenn nicht, muss ich eine Reihe von Frames sammeln und sie außerhalb von FFmpeg verarbeiten. wahrscheinlich mit PHP. Als Randbemerkung, wenn jemand einen bestehenden Code hat, der dies tut, wäre es super hilfreich!

Danke vielmals

Antworten (1)

Kein ffmpeg-Code kann interessante Frames identifizieren. Es gibt höchstens Filter, die repräsentative Frames erkennen und Filter, die Frames mit einem Szenenwechsel identifizieren. Also gibt es dafür bestenfalls einen Thumbnail-Filter. Es kann keine "interessanten" Frames erkennen, aber es erkennt repräsentative Frames. Frames aus der Mitte der Überblendungen sollten also aus sein.

Syntax ist

ffmpeg -ss 50 -i in.avi -vf thumbnail=300 -vsync 0 thumbs%d.png

Dadurch wird ein repräsentatives Bild aus jedem Stapel von 300 aufeinanderfolgenden Bildern ausgewählt.

Das scheint die Antwort zu sein, danke. Ich denke jedoch, dass die Verwendung der Syntax etwas anders ist. Das Ausführen des obigen Befehls führt zu einer einzelnen Datei über 1 GB (sie muss alle 300 Frames einen Frame enthalten), anstatt ein separates Bild für jeden Frame zu erstellen. Da wir außerdem nur einen Rahmen benötigen, können wir meiner Meinung nach hinzufügen -frames:v 1, dass der erste geeignete Rahmen verwendet wird, den er findet. Das scheint mir ok zu sein. Dies scheint den -ssParameter jedoch zu ignorieren, soweit ich das beurteilen kann. Wäre ideal, um nach X Sekunden mit der Suche nach Thumbnails zu beginnen, aber vielleicht wird es nicht benötigt. Danke noch einmal!
Überprüfen Sie Ihre ffmpeg-Version. Sowohl ssvor -ider Arbeit als auch bei der Ausgabe handelt es sich um eine Reihe von Bilddateien (PNG ist sowieso ein Standbildformat). Es ist eine Änderung erforderlich, um eine Eigenart von ffmpeg zu vermeiden, die Frames dupliziert. Ich habe das dem Befehl hinzugefügt.