Mit FFMPEG: Wie man eine Scene Change Detection? mit timecode?
Basierend auf diesem Artikel scheint es, dass es möglich ist, verwenden Sie FFMPEG zu erkennen Szenenwechsel in videos:
http://www.luckydinosaur.com/u/ffmpeg-scene-change-detector
Nun habe ich ein video, das zeigt ein Buch mit text und wenn der text (Wort oder Satz) gesprochen wird, es wird hervorgehoben.
So etwas wie dieses Hörbuch: https://youtu.be/lA7L6ZNVKjc
Ich wissen muss, um den timestamp, wenn der text wird hervorgehoben (daher Szenenwechsel), wird diese ermöglichen es mir, hinzufügen von timestamp-tags auf meinem youtube-video, so dass es einfacher wird für den Zuhörer zum navigieren durch das Hörbuch.
Was ist der Magie Befehlszeile würde dies tun?
Vielen Dank!
InformationsquelleAutor Mozart | 2016-02-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kombination der Szene filter (für die Erkennung von Szenenwechsel) und die showinfo filter erreichen, was Sie wollen:
Dieser Befehl extrahiert alle Bilder, die sich aus dem vorherigen frame, um mehr als (
gt
)0.4
(auf einer Skala von0
zu1
). Für diese frames, die Informationen werden gedruckt (showinfo
) wie dieseJetzt müssen Sie nur noch zum extrahieren der Zeitstempel. Ich glaube, du bist daran interessiert
pts_time
. Man könnte es so machen:Dieser wird Ihnen die Liste aller Zeitstempel:
Damit dieser Ansatz funktioniert, müssen Sie eine version von FFmpeg, die die Szene-Erkennung. Auch, wählen Sie einen geeigneten Wert für den threshold (
0.4
im ersten Befehl). Sie können versuchen, zu finden eine optimale Schwellenwert für das extrahieren von frames für verschiedene Schwellenwerte (und danach untersuchen Sie den Rahmen manuell) wie dieseNur zur Klarstellung:
grep [0-9.]*
schließt nicht aus, Ganzzahlen, wie behauptet, in einer anderen Antwort. Es entspricht einer beliebigen Zeichenfolge, die aus Ziffern und Zeiten, aber es würde auch passen, non-Nummern wie '4.4.4'. Aber ffmpeg sollte nicht die Ausgabe so schlecht ausgebildet Zeitstempel.grep '[0-9]*\.[0-9]*' -o
so dass die endgültige grep istgrep showinfo ffout | grep pts_time:[0-9.]* -o | grep '[0-9]*\.[0-9]*' -o > timestamps
die.
muss escaped werden, da es sonst für ein beliebiges Zeichennicht mit jedem Charakter
.
tut.[.]
ist ein bracket-Ausdruck für ein beliebiges einzelnes Zeichen zwischen den Klammern. Siehe auch die grep-Handbuch auf "Charakter-Klassen und Klammer-Ausdrücke". Währendgrep [0-9.]*
würde auch passen, mehr als floats und integers (aber in der Realität nicht in dieser pipeline), regexp, ausschließen können ganze zahlen wie schon in der anderen Antwort.Hallo, ich bin interessiert in Szenen (change detection). Sie schrieb über eine version von FFmpeg, die die Szene-Erkennung. Können Sie mir sagen, welche version von ffmpeg implementiert diese Funktion?
das neueste und - mindestens - jede version seit Juli '16. Ich weiß nicht, Wann dieser Hinzugefügt wurde.
Es funktioniert nicht für mich: pastebin.com/x0W47a04
InformationsquelleAutor ckoehn
Ich habe nicht die rep, um einen Kommentar auf der oben genannten Antwort, aber ich wollte darauf hinweisen, dass die grep-gepostet von sowohl @ckoehn und @keypulsations nur greifen Zeitstempel, die floating-point. Greifen beide floating-point und integer-Zeitstempel verwenden Sie die folgende regex
InformationsquelleAutor Luke Harrison
Ich habe versucht die @ckoehn Antwort und es funktionierte, bis es aufgehört zu arbeiten, das Sternchen in das Letzte grep war, Probleme zu verursachen. Um dies zu vermeiden empfehle ich die Verwendung von Anführungszeichen in der grep-Sätze wie:
InformationsquelleAutor Ignacio Peletier
Können Sie einfach den Befehl:
Diese speichern nur die relevanten Informationen in die time.txt Datei wie unten.
Rahmen ist die Seriennummer der erkannten Schuss Wechsel von der ab. Auch, wählen Sie Ihre threshold-Wert (hier 0.3) passend für Ihren Anwendungsfall auf die richtige Ausgänge
InformationsquelleAutor Abhijeet