[FFmpeg-devel] [FFmpeg-devel, RFC] lavfi: add opencl tonemap filter.

Niklas Haas ffmpeg at haasn.xyz
Fri May 11 11:10:42 EEST 2018


> The way my scene change detection heuristic works like this: I trigger a
> scene change (and therefore discard the frame averaging buffer) if the
> distance between the current frame average brightness and the current
> running average exceeds a threshold value, that threshold being (by
> default) 20 cd/m².
> 
> So we can divide the failures of this algorithm into two categories:
> 
> 1. False negative (scene change without resetting the buffer): This can
>    only happen if there was an actual scene change but the average
>    brightness change did not exceed 20 cd/m², i.e. the scenes are
>    similar in brightness. I consider this a fairly harmful failure
>    because that also means there's no visual discontinuity since the
>    scenes are so similar to begin with.
> 
> 2. False positive (buffer got reset without a scene change). This is the
>    more worrying failure of the algorithm, since it can happen in the
>    middle of a scene (e.g. as the result of a bright flash of light
>    on-screen), which will manifest itself as a sudden decrease in the
>    total frame brightness coinciding with the new source of light. (Or
>    vice versa, a sudden increase in brightness coinciding with the
>    sudden absence of a light source).
> 
> The scene change threshold is a trade-off. Lowering the value decreases
> the likelihood of #1 but increases the likelihood of #2. Increasing the
> value decreases the likelihood of #2, but increases the likelihood (and
> apparent effect) of #1.
> 
> If you want to optimize or improve the algorithm, the case #2 is the one
> I would be most interested in, i.e. reducing the rate of false
> positives. This can surely be done in a smarter way, e.g. by comparing
> more than just the scene average but also other easily obtained metrics.
> 
> If you have access to low-level frame information, you could do
> something like increasing the threshold for non-keyframes significantly,
> since keyframes are likely to coincide with scene changes or cuts this
> might help the algorithm out.

Thinking about this logic again, I came to realize that a different
strategy might be to check instead for a minimum threshold brightness
difference in a critical number of different areas of the screen. This
way, a very bright light source appearing or becoming occluded in one
local part of the frame will not trigger a scene change, while a sudden
change in brightness of a large part of the frame will.

I will try it if I get the opportunity to.


More information about the ffmpeg-devel mailing list