[FFmpeg-trac] #9523(avfilter:new): segment_times splits at I-frames that are not keyframes

FFmpeg trac at avcodec.org
Mon Nov 22 21:52:35 EET 2021

#9523: segment_times splits at I-frames that are not keyframes
             Reporter:  TurboLed    |                    Owner:  (none)
                 Type:  defect      |                   Status:  new
             Priority:  normal      |                Component:  avfilter
              Version:  git-master  |               Resolution:
             Keywords:              |               Blocked By:
             Blocking:              |  Reproduced by developer:  0
Analyzed by developer:  0           |
Comment (by TurboLed):

 Replying to [comment:6 Balling]:
 > Okay, first of all I cannot reproduce it. Second of all what I can
 reproduce is that it does not do 3 segments but only two here!

 The video is 5 seconds long, the command line (-segment_times 3) asks to
 split the video at 3 seconds to create 2 segments (first segment: 3
 seconds, second segment: 2 seconds)

 > Also, on your file (remember to use https://temp-mail.org/ to download
 files from that site)
 > ffprobe.exe -skip_frame nokey -i sample_48fps_iframes.mp4 -show_frames
 > prints only two frames, which I suppose is BS:
 > {{{
 > media_type=video
 > stream_index=0
 > key_frame=1
 > pkt_pts=0
 > pkt_pts_time=0.000000
 > pkt_dts=120120
 > pkt_dts_time=2.502500
 > }}}

 The video is only 5 seconds long, so it contains only 2 IDR keyframes, but
 contains also several intermediate I-frames every 0.625 seconds or so.

 > I will aslo point out that in my case the files work. Both of them. :)

 Yes, this short sample will work okay in your player. But the problem is
 that the second segment starts with an I-frame that is not an IDR frame
 (i.e. the first frame of output001.mp4 is not reported as a key_frame=1 by
 ffprobe). The consequence is that for another, longer sample, that means
 that the first frame might be referring to a frame in the previous part of
 the video which doesn't exist anymore, because only IDR keyframes are
 complete and fully independent.

 I can find and upload a much longer sample that illustrates the problem
 better, but we are talking gigs of video. Believe me this is an issue when
 splitting and joining segments, where some segments cannot start properly
 because of missing information from the previous frames. In my case the
 video can lose track and recover after several seconds (because each IDR
 is 5 seconds apart).

 I still believe this is independent from #8820 because it is about the -f
 segment feature, not about what ffprobe reports.

 For the sake of this issue, ffprobe reports the correct thing (i.e. there
 is no keyframe at the start of the second segment, so it should not have
 accepted to split there.) The segment feature (-f segment) should split
 only at IDR frames because that's what a real keyframe is, not I-frames.
Ticket URL: <https://trac.ffmpeg.org/ticket/9523#comment:7>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker

More information about the FFmpeg-trac mailing list