
Estou tentando usar o filtro de detecção de congelamento no ffmpeg.
ffmpeg -i Trial.mp4 -vf "freezedetect=n=-60dB:d=0.5,metadata=mode=print:file=freeze.txt" -map 0:v:0 -f null -
Usei o comando acima e a saída diz sem congelamento. Mas o vídeo é um vídeo parado feito no celular.
Se eu ajustar o nível de ruído para 0,05, serão relatados congelamentos.
Como determinar esse valor?
Responder1
Você só pode determinar isso por tentativa e erro.
O filtro calcula a diferença entre dois quadros como a razão entre a soma das diferenças absolutas (TRISTE). Em pseudocódigo:
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
}
Como a diferença real entre dois quadros é determinada pelo ruído, ela dependerá muito do conteúdo. Observe que mesmo que o assunto não tenha mudado, “ruído” pode significar ruído de câmera/sensor, que sempre será diferente entre dois quadros capturados.
Somente para conteúdo gerado por computador a diferença entre frames com o mesmo assunto será zero (ou muito próxima de zero).