[FFmpeg-trac] #442(undetermined:new): scene change detection

FFmpeg trac at avcodec.org
Wed Sep 7 08:46:54 CEST 2011

#442: scene change detection
             Reporter:  lovelove     |                    Owner:
                 Type:  enhancement  |                   Status:  new
             Priority:  normal       |                Component:
              Version:  unspecified  |  undetermined
             Keywords:  scene        |               Resolution:
  change detection                   |               Blocked By:
             Blocking:               |  Reproduced by developer:  0
Analyzed by developer:  0            |

Comment (by lovelove):

 Here is the (latest of several) FFmpeg-users threads discussing this
 issue: http://ffmpeg-users.933282.n4.nabble.com/Scene-detection-

 I will try to concisely sum up the key suggestions of the thread:


 "You could store the various first frames of each scene in order to get a
 sort of photographic storyline of a movie, or you could store the
 timestamps somewhere in order to use that to automatically cut every movie
 'shot' with a video editor. Both options should be possible with
 FFmpeg+libavfilter." (Stefano Sabatini)


 "It should be not too hard to implement a scene detection filter in
 libavfilter. The fake syntax for a lavfi filter (BIG WARNING, libavfilter
 is not still properly integrated into FFmpeg, check the soc repo) would be
 something of the kind:

 '''ffmpeg -i in.avi -vfilters "[IN] split [SC_DETECT] [OUT], [SC_DETECT]
 sc_detect=PARAMS, process_sc_frames=PARAMS"  /dev/null'''

 As you see you would need two filters, one detecting scene changes and
 outputting the detected scene change frames to the output, and a filter to
 furtherly processes the information of the frames, for example it could
 print to a file the timestamp of the file or to render as an image file
 the processed frames.

 The sc_detect filter implementation is the tricky part, but a naive
 implementation shouldn't be too hard to accomplish." (Stefano Sabatini)


 "Scene-detection looks like a much requested feature, please file a
 feature request on the issue tracker." (Stefano Sabatini)


 "On the technical side: this has been already discussed on ffmpeg-devel,
 an underkill solution may be as simple as tweaking the select filter and
 adopt a simple pixel-per-pixel average difference as metric.

 For images with moving objects that's not a proper solution, and you need
 motion estimation code, which is already integrated in libavcodec, so the
 ideal solution would be to refactor the ME code in libavcodec and move it
 to libavutil. By doing this you may also improve the code itself, and thus
 improve the codecs using it at the same time." (Stefano Sabatini)


 "For ideas/details about how to implement a scene-cut detection, I would
 suggest looking at the code of shotdetect (Johan Mathe is really nice, and
 the license is LGPL by the way). His approach is actually really simple
 and straightforward, and we've now been using it in our long-term archive
 solution for quite a while and could provide information based on hands-on
 experience about what to expect from that straight-forwards algorithm.

 I'm mentioning this, because I think Johan's algorithm is merely a
 variation of a "pixel-per-pixel average difference" and it works
 surprisingly well - on really different kinds of content." (Peter B.)

Ticket URL: <http://ffmpeg.org/trac/ffmpeg/ticket/442#comment:1>
FFmpeg <http://ffmpeg.org>
FFmpeg issue tracker

More information about the FFmpeg-trac mailing list