[FFmpeg-trac] #7101(avfilter:new): Overlay wrongly enabled before specified time

FFmpeg trac at avcodec.org
Thu Mar 22 19:23:13 EET 2018


#7101: Overlay wrongly enabled before specified time
----------------------------------+--------------------------------------
             Reporter:  slhck     |                     Type:  defect
               Status:  new       |                 Priority:  normal
            Component:  avfilter  |                  Version:  git-master
             Keywords:  overlay   |               Blocked By:
             Blocking:            |  Reproduced by developer:  0
Analyzed by developer:  0         |
----------------------------------+--------------------------------------
 I want to show a "loading" spinner at a given time for a given amount of
 time, overlaid on top of a video. The video should freeze underneath the
 spinner.

 In the following case, I want to show the spinner as an "initial loading"
 for 4 seconds, then at 10 seconds (media time) for 0.5 s, etc. At the same
 time, the video is looped (size = 1 frame) for the same amount of time.

 Consider the following command:

 {{{
 ffmpeg \
 -y \
 -f lavfi -i
 testsrc=duration=60:size=320x240:rate=60,format=pix_fmts=yuv420p \
 -i click_and_count.m4a \
 -filter_complex " \
     [0:v] \
         loop=loop=240:size=1:start=0, setpts=N/FRAME_RATE/TB, \
         loop=loop=30:size=1:start=840, setpts=N/FRAME_RATE/TB, \
         loop=loop=84:size=1:start=1140, setpts=N/FRAME_RATE/TB, \
         loop=loop=48:size=1:start=1548, setpts=N/FRAME_RATE/TB \
     [stallvid]; \
         movie=filename=spinner-64-white.png:loop=0,
 setpts=N/(FRAME_RATE*TB)*2 \
     [spinner]; \
     [stallvid][spinner] \
         overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2:shortest=1:\
 enable='between(t,0,4.0)+between(t,14.0,14.5)+between(t,19.0,20.4)+between(t,25.8,26.6)'
 \
     [outv];
     [1:a] \
         aloop=loop=192000:size=1:start=0, asetpts=N/SAMPLE_RATE/TB, \
         aloop=loop=24000:size=1:start=672000, asetpts=N/SAMPLE_RATE/TB, \
         aloop=loop=67200:size=1:start=912000, asetpts=N/SAMPLE_RATE/TB, \
         aloop=loop=38400:size=1:start=1238399, asetpts=N/SAMPLE_RATE/TB, \
 volume=0:enable='between(t,0,4.0)+between(t,14.0,14.5)+between(t,19.0,20.4)+between(t,25.8,26.6)'
 \
     [outa] \
 " -shortest -map "[outv]" -map "[outa]" output.mp4
 }}}

 The spinner is indeed shown exactly when the 10 appears in the video (at
 00:00:14), but it is also shown for exactly one frame, four frames before
 the 10 appears.

 This should of course not happen, as the overlay is only enabled between
 14 and 14.5.

--
Ticket URL: <https://trac.ffmpeg.org/ticket/7101>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list