[FFmpeg-trac] #9455(undetermined:new): Overlay n expression being off 1 frame

FFmpeg trac at avcodec.org
Fri Oct 15 15:05:45 EEST 2021


#9455: Overlay n expression being off 1 frame
-------------------------------------+-------------------------------------
             Reporter:  Jozef        |                    Owner:  (none)
  Chutka                             |
                 Type:  defect       |                   Status:  new
             Priority:  normal       |                Component:
                                     |  undetermined
              Version:  4.3.2        |               Resolution:
             Keywords:  overlay n    |               Blocked By:
             Blocking:               |  Reproduced by developer:  0
Analyzed by developer:  0            |
-------------------------------------+-------------------------------------
Description changed by Jozef Chutka:

Old description:

> Summary of the bug:
>
> Using ffmpeg 4.4
>
> It seems to me that when using overlay, the `n` expression is actually 1
> frame off. To prove it, I managed to put together the following demo.
>
> How to reproduce:
> {{{
> ffmpeg -filter_complex_script input/filter.txt -ss 1 -frames:v 1
> output/out.png -y
> }}}
>
> filter.txt:
> {{{
> color=black:300x320:8[main];
>
> color=red:64x100:8[red];
> color=white:2x100:8,scale=eval=frame:w=n*10:h=ih[white1];
> [white1][red]overlay=x=(W-w)/2[red];
>
> color=green:64x100:8[green];
> color=white:2x100:8,scale=eval=frame:w=n*10:h=ih[white2];
> [white2][green]overlay=x=(n*10-64)/2[green];
>
> color=blue:64x100:8[blue];
> color=white:2x100:8,scale=eval=frame:w=n*10:h=ih[white3];
> [white3][blue]overlay=x=((n-1)*10-64)/2[blue];
>
> [main][red]overlay[main];
> [main][green]overlay=y=110[main];
> [main][blue]overlay=y=220
> }}}
>
> What I am doing here is, I am animating position of these red/green/blue
> bars in order to center within its growing white container.
>
> The containers width is `n*10`, bar is 64, so expected formula to center
> would be `(n*10-64)/2` (same as `(W-w)/2`). However, when applied, the
> green bar is not centered.
>
> I am able to center using `((n-1)*10-64)/2`. This makes me think that the
> `n` expression in overlay is for some reason off by 1.

New description:

 Summary of the bug:

 Using ffmpeg 4.4

 It seems to me that when using overlay, the `n` expression is actually 1
 frame off. To prove it, I managed to put together the following demo.

 How to reproduce:
 {{{
 ffmpeg -filter_complex_script filter.txt -ss 1 -frames:v 1 output/out.png
 -y
 }}}

 filter.txt:
 {{{
 color=black:300x320:8[main];

 color=red:64x100:8[red];
 color=white:2x100:8,scale=eval=frame:w=n*10:h=ih[white1];
 [white1][red]overlay=x=(W-w)/2[red];

 color=green:64x100:8[green];
 color=white:2x100:8,scale=eval=frame:w=n*10:h=ih[white2];
 [white2][green]overlay=x=(n*10-64)/2[green];

 color=blue:64x100:8[blue];
 color=white:2x100:8,scale=eval=frame:w=n*10:h=ih[white3];
 [white3][blue]overlay=x=((n-1)*10-64)/2[blue];

 [main][red]overlay[main];
 [main][green]overlay=y=110[main];
 [main][blue]overlay=y=220
 }}}

 What I am doing here is, I am animating position of these red/green/blue
 bars in order to center within its growing white container.

 The containers width is `n*10`, bar is 64, so expected formula to center
 would be `(n*10-64)/2` (same as `(W-w)/2`). However, when applied, the
 green bar is not centered.

 I am able to center using `((n-1)*10-64)/2`. This makes me think that the
 `n` expression in overlay is for some reason off by 1.

--
-- 
Ticket URL: <https://trac.ffmpeg.org/ticket/9455#comment:1>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list