Opened 6 hours ago

Last modified 4 hours ago

#11366 new defect

Regression when prepending/concatenating still image to video

Reported by: mahozad Owned by:
Priority: normal Component: avfilter
Version: 7.1 Keywords: concat concatenate filter_complex
Cc: mahozad, MasterQuestionable Blocked By:
Blocking: Reproduced by developer: yes
Analyzed by developer: no

Description

Summary of the bug:
I'm using FFmpeg to create clips with ability to concat an image to be shown at the start of the clip for the specified duration: https://github.com/mahozad/cutcon

It uses FFmpeg CLI.

FFmpeg version 6.1.1 (and I think also version 5.1.2) worked as expected. When upgrading to FFmpeg 7.1, the result video just contains the intro image and then just ends.

I'm not sure if this is a regression. Maybe my FFmpeg command is "wrong" and it should have failed in previous versions as well?

How to reproduce:
FFmpeg 7.1 and also FFmpeg-full 2024-12-19-git-494c961379 downloaded from https://www.gyan.dev/ffmpeg/builds/
both tested on Windows 11.

Here is an example FFmpeg invocation (formatted, each option in a new line) to reproduce the problem.
It tries to create a clip from an input MP4 file and show an image at the start for 8 seconds. The image size is coerced to be at maximum the size of video and is padded with black color if its aspect ratio is different than the video. There is some other filters too.

path/to/ffmpeg.exe
  -y
  -nostdin
  -loglevel
  info
  -stats_period
  0.1s
  -accurate_seek
  -ss
  356500ms
  -to
  378500ms
  -i
  path/to/a/video.mp4
  -loop
  1
  -framerate
  25
  -t
  8s
  -i
  path/to/a/picture.jpg
  -t
  8s
  -f
  lavfi
  -i
  aevalsrc=0
  -filter_complex
      [0] yadif=1 [media-de-interlaced];
      [media-de-interlaced] scale=iw*sar:ih [media-anamorphic-fixed];
      [media-anamorphic-fixed] pad=ceil(iw/2)*2:ceil(ih/2)*2 [media-odd-pixel-number-fixed];
      [media-odd-pixel-number-fixed] setsar=1/1 [media-source-aspect-ratio-normalized];
      [media-source-aspect-ratio-normalized] null [media];
      [1][media] scale2ref='if(gt(main_a,a),min(main_w,iw),min(main_h,ih)*main_a)':'if(gt(main_a,a),min(main_w,iw)/main_a,min(main_h,ih))' [intro-image-max-size-coerced][media];
      [1][media] scale2ref=iw:ih [size-template][media];
      [size-template] drawbox=w=iw:h=ih:t=fill:color=#000000 [intro-background];
      [intro-background][intro-image-max-size-coerced] overlay=x='(W-w)/2':y='(H-h)/2' [intro-with-background];
      [intro-with-background] setsar=1/1 [intro-source-aspect-ratio-normalized];
      [intro-source-aspect-ratio-normalized] null [intro];
      [intro][2][media] concat=n=2:v=1:a=1
  -c:v
  libx264
  -c:a
  aac
  -crf
  23
  -r
  25
  -metadata
  encoding_tool=Cutcon v1.2.3
  path/to/output.mp4

Change History (2)

comment:1 by MasterQuestionable, 6 hours ago

Cc: MasterQuestionable added
Component: undeterminedavfilter

͏    Probably relevant:
͏    https://trac.ffmpeg.org/ticket/11257#comment:3
͏    ("scale2ref" removed..?)

͏    Try removing various options to ascertain the minimal reproducible.

comment:2 by mahozad, 4 hours ago

OK. So simplifying only the filter to the below still does not work:

  -filter_complex
      [0] null [media];
      [1][media] scale2ref='if(gt(main_a,a),min(main_w,iw),min(main_h,ih)*main_a)':'if(gt(main_a,a),min(main_w,iw)/main_a,min(main_h,ih))' [intro-image-max-size-coerced][media];
      [intro-image-max-size-coerced] null [intro];
      [intro][2][media] concat=n=2:v=1:a=1

But simplyfing it even more does work:

  -filter_complex
      [0] null [media];
      [1] null [intro];
      [intro][2][media] concat=n=2:v=1:a=1
Last edited 4 hours ago by mahozad (previous) (diff)
Note: See TracTickets for help on using tickets.