
Ich versuche, den Freeze-Detect-Filter in ffmpeg zu verwenden.
ffmpeg -i Trial.mp4 -vf "freezedetect=n=-60dB:d=0.5,metadata=mode=print:file=freeze.txt" -map 0:v:0 -f null -
Habe den obigen Befehl verwendet und die Ausgabe zeigt, dass es kein Einfrieren gibt. Aber das Video ist ein Standbild, das mit dem Handy aufgenommen wurde.
Wenn ich den Geräuschpegel auf 0,05 einstelle, werden Einfrierungen gemeldet.
Wie ermittelt man diesen Wert?
Antwort1
Dies lässt sich nur durch Ausprobieren herausfinden.
Der Filter berechnet die Differenz zwischen zwei Frames als Verhältnis der Summe ihrer absoluten Differenzen (TRAURIG). Im Pseudocode:
is_frozen(reference, frame) {
sad = 0
count = 0
for plane in planes[frame] {
sad += sad_of_plane(plane, reference, frame)
count += width[plane] * height[plane]
}
ratio = sad / count
return ratio <= noise
}
Da der tatsächliche Unterschied zwischen zwei Bildern durch das Rauschen bestimmt wird, ist er sehr inhaltsabhängig. Beachten Sie, dass „Rauschen“ auch dann Kamera-/Sensorrauschen bedeuten kann, wenn sich das Motiv nicht geändert hat, und dieses Rauschen zwischen zwei aufgenommenen Bildern immer unterschiedlich ist.
Nur bei computergenerierten Inhalten beträgt der Unterschied zwischen Bildern mit demselben Motiv null (oder liegt sehr nahe bei null).