Verwendung von FFMPEG: Wie wird eine Szenenwechselerkennung durchgeführt? mit Timecode?

8

Basierend auf diesem Artikel scheint es möglich zu sein FFMPEG zu verwenden, um Szenenwechsel in Videos zu erkennen: Ссылка

Jetzt habe ich ein Video, das einen Buchtext anzeigt und wenn der Text (Wort oder Satz) gesprochen wird, wird er hervorgehoben. So etwas wie dieses Hörbuch: Ссылка

Ich muss den Zeitstempel wissen, wenn der Text hervorgehoben wird (daher Szenenwechsel). Dadurch kann ich Timestamp-Tags auf meinem Youtube-Video hinzufügen, so dass die Hörer leichter durch das Hörbuch navigieren können.

Was ist die magische Befehlszeile, die dies tun würde?

Vielen Dank!

    
Mozart 27.02.2016, 21:15
quelle

2 Antworten

8

Kombiniert den Filter mit der Szene (um Szenenänderungen zu erkennen) und den showinfo Filter sollte erreichen, was Sie wollen:

%Vor%

Dieser Befehl extrahiert alle Frames, die sich vom vorherigen Frame um mehr als ( gt ) 0.4 (auf einer Skala von 0 bis 1 ) unterscheiden. Für diese Frames werden Informationen wie folgt ausgedruckt ( showinfo )

%Vor%

Jetzt müssen Sie nur den Zeitstempel extrahieren. Ich denke du bist an pts_time interessiert. Du könntest es so machen:

%Vor%

Damit erhalten Sie die Liste aller Zeitstempel:

%Vor%

Damit dieser Ansatz funktioniert, benötigen Sie eine Version von FFmpeg, die die Szenenerkennung implementiert. Außerdem müssen Sie einen geeigneten Wert für den Schwellenwert auswählen ( 0.4 im ersten Befehl). Sie können versuchen, einen optimalen Schwellenwert zu finden, indem Sie Frames für verschiedene Schwellenwerte extrahieren (und anschließend die Rahmen manuell untersuchen) wie folgt

%Vor%

Nur zur Verdeutlichung: grep [0-9.]* schließt Ganzzahlen nicht aus, wie in einer anderen Antwort behauptet. Es entspricht einer beliebigen Zeichenfolge aus Ziffern und Punkten, aber es würde auch Nicht-Zahlen wie '4.4.4' entsprechen. Ffmpeg sollte jedoch solche schlecht geformten Zeitstempel nicht ausgeben.

    
ckoehn 05.07.2016 13:44
quelle
4

Ich habe nicht den Rep, um einen Kommentar zu der obigen Antwort zu posten, aber ich wollte darauf hinweisen, dass der von @ckehn und @keypulsations gepostete Grep nur Timestamps packt, die Gleitkommazahlen sind. Um sowohl Fließkomma- als auch Ganzzahl-Zeitstempel zu erfassen, verwenden Sie den folgenden Regex

%Vor%     
Luke Harrison 24.11.2016 14:53
quelle

Tags und Links