我正在尝试在 ffmpeg 中使用冻结检测过滤器。
ffmpeg -i Trial.mp4 -vf "freezedetect=n=-60dB:d=0.5,metadata=mode=print:file=freeze.txt" -map 0:v:0 -f null -
使用上述命令,输出显示没有冻结。但视频是在手机上拍摄的静止视频。
如果我将噪音水平调整到 0.05,就会报告冻结。
如何确定这个值?
答案1
您只能通过反复试验来确定这一点。
该滤波器计算两帧之间的差异,即它们的绝对差异之和 (伤心)伪代码如下:
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
}
由于两帧之间的实际差异取决于其噪声程度,因此它将非常依赖于内容。请注意,即使主体没有变化,“噪声”也可能意味着相机/传感器噪声,这在两个捕获的帧之间总是不同的。
仅对于计算机生成的内容,具有相同主题的帧之间的差异才为零(或非常接近于零)。