Ersetzen Sie schwarze Frames durch vorherige Frames

Ich habe aufgrund meiner Kamera / SD-Karte problematisches Tauchmaterial - etwa jeder vierte Frame ist nur schwarz, und ich möchte alle diese schwarzen Frames entweder durch eine Interpolation zwischen dem vorherigen und dem nächsten Frame ersetzen oder einfach den vorherigen Frame duplizieren.

Ich habe diese Frage "schwarze Frames aus VOB-Dateien mit ffmpeg entfernen" gefunden , aber ich möchte die Frames nicht ausschneiden, sondern zwischen den beiden Frames interpolieren oder den vorherigen Frame duplizieren.

Ich denke, ich könnte alle relevanten Positionen mit den Schwarzbildfiltern usw. erhalten, aber welche Art von Aktionen würde ich verwenden, um diese Bilder vollautomatisch durch eine Interpolation oder ein Duplikat des vorherigen Bildes zu ersetzen (also ich nur meine Filmdatei in das Skript übergeben)?

Alles, was ich bisher gefunden habe, ist die "shuffleframes"-Methode, die ich irgendwie (wie?) mit der Position der schwarzen Frames füttern und dann damit den vorherigen Frame duplizieren könnte.

Demomaterial, das das Problem detailliert beschreibt, finden Sie hier .

Antworten (1)

Es ist möglich, die schwarzen Frames zu entfernen und frühere Frames zu duplizieren.

ffmpeg -i in.mp4 -vf blackframe=0,metadata=select:key=lavfi.blackframe.pblack:value=50:function=less -vsync cfr -c:a copy out.mp4

Der Blackframe-Filter analysiert und registriert den Anteil der schwarzen Pixel eines Frames. Der Metadatenfilter hält alle Frames, die höchstens 50 % der Pixel schwarz haben. Die entfernten Frames erzeugen eine Lücke im Videostream. Indem Sie also die Videosynchronisierungsmethode auf eine konstante Bildrate einstellen, dupliziert ffmpeg frühere (nicht schwarze) Bilder, um diese Lücken zu füllen.

Sie müssen mit dem Metadatenauswahlwert experimentieren 50, um den richtigen Schwellenwert zu erhalten.

Das ist großartig. Es erreicht ziemlich genau das, was ich wollte (glaube ich). Ich frage mich jedoch, wie es a) mit Fällen umgeht, in denen mehrere direkt auf schwarze Frames folgen, b) warum die Ausgabedateien durchgehend länger sind als die Eingabedateien (in Bezug auf die Dauer).
Warum dauert die Ausgabe länger als die Eingabe?
Vollständiges Protokoll teilen. Von wie viel Unterschied reden wir?
Hallo, es tut mir leid für die Verzögerung bei der Antwort. Der Unterschied beträgt schon einige Sekunden, zB hier pastebin.com/NfTVtEC0 Originaldatei: cl.ly/qSfM ffmpeged-Datei: cl.ly/qSMr
Sehe keinen Unterschied. Mediainfo zeigt Formatdauer für Original: 3 s 532 msund für neue Datei3 s 534 ms
Hmm, ich habe sie in Final Cut ausgerichtet und das obere ist das transkodierte und es ist länger. cl.ly/qSQr Und das ist nur ein 3s-Video... Und die Audiozeilen sehen auch anders aus cl.ly/qRvs 🤔
Ihre Quelle ist eine variable Bildrate. Anscheinend kann FCP das nicht respektieren - es passt Clips an eine konstante Bildrate an. Dadurch wird die Clipdauer reduziert, wenn Frames mit einer individuellen Dauer von mehr als 1/fpsSekunden vorhanden sind.
Ist es möglich, die fehlenden Frames zu interpolieren, anstatt sie durch den neuesten nicht schwarzen Frame zu ersetzen? [Bearbeiten] Ich habe jetzt eine neue Frage dazu gestellt