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

FFmpeg trac at avcodec.org
Mon Nov 27 03:38:14 EET 2023


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

 I am also facing the same issue. Is this issue will not be fixed?
 It seems that if stream does not have B-frame, all of I-frame will be
 marked as Keyframe in container.
 Here is the procedure to reproduce this issue.

 1. encode BBB file first 30sec.

    ffmpeg -t 30 -i bbb.mp4 -preset ultrafast -profile:v baseline
 -sc_threshold 50 encoded.mp4

 dump all I-frames.
 frame, key_frame, pts, pict_type, coded_picture_number
 {{{
 frame,1,0.000000,I,0
 frame,0,0.100000,I,3
 frame,0,0.133333,I,4
 frame,0,0.166667,I,5
 frame,0,0.200000,I,6
 frame,0,0.233333,I,7
 frame,1,4.066667,I,122
 frame,0,4.200000,I,126
 frame,0,4.233333,I,127
 frame,0,4.466667,I,134
 frame,1,12.400000,I,372
 frame,1,16.300000,I,489
 frame,1,20.166667,I,605
 frame,1,27.466667,I,824
 }}}
 This is stss Box.
 {{{
 [stss] Size=40 Version=0 Flags=0x000000 EntryCount=6 SampleNumber=[1, 123,
 373, 490, 606, 825]
 }}}

 2. remux encoded.mp4 file
     ffmpeg -i encoded.mp4 -c copy remuxed.mp4

 dump all I-frames. This is same as encoded.mp4

 frame, key_frame, pts, pict_type, coded_picture_number
 {{{
 frame,1,0.000000,I,0
 frame,0,0.100000,I,3
 frame,0,0.133333,I,4
 frame,0,0.166667,I,5
 frame,0,0.200000,I,6
 frame,0,0.233333,I,7
 frame,1,4.066667,I,122
 frame,0,4.200000,I,126
 frame,0,4.233333,I,127
 frame,0,4.466667,I,134
 frame,1,12.400000,I,372
 frame,1,16.300000,I,489
 frame,1,20.166667,I,605
 frame,1,27.466667,I,824
 }}}

 All of I-frames are marked as keyframe in stss box.
 {{{
 [stss] Size=72 Version=0 Flags=0x000000 EntryCount=14 SampleNumber=[1, 4,
 5, 6, 7, 8, 123, 127, 128, 135, 373, 490, 606, 825]
 }}}


 I think that h264_parser.c should not include following code. Because It
 is just for the specific camera... If we necessary following code, it
 should be more  restricted code.
 {{{
     // heuristic to detect non marked keyframes
     if (p->ps.sps->ref_frame_count <= 1 && p->ps.pps->ref_count[0] <= 1 &&
 s->pict_type == AV_PICTURE_TYPE_I)
         s->key_frame = 1;
 }}}
-- 
Ticket URL: <https://trac.ffmpeg.org/ticket/9523#comment:21>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list