#10018: Duration estimation regression for h264 in mov
---------------------------------+----------------------------------------
             Reporter:  Peter Z  |                    Owner:  (none)
                 Type:  defect   |                   Status:  new
             Priority:  normal   |                Component:  undetermined
              Version:  5.0.2    |               Resolution:
             Keywords:           |               Blocked By:
             Blocking:           |  Reproduced by developer:  0
Analyzed by developer:  0        |
---------------------------------+----------------------------------------
Description changed by Peter Z:

Old description:

> Summary of the bug:
> There appears to be a regression with guesstimation of packet durations
> in ffmpeg v5 compared to v4.4.1. Last tested on ffmpeg master:
> 86157f5a25615491c94b0498bf76040b268bad6b
>
> How to reproduce:
> Create a test file with a frame rate of 30fps with a timescale double
> that.
> {{{
> % ffmpeg -f lavfi -i testsrc=duration=10:size=1728x720:rate=30 -c:v
> libx264 -b:v 1000000 -video_track_timescale 60 -movie_timescale 60
> repro.mp4
> }}}
> Check the duration of the packets with ffprobe:
> {{{
> % ffprobe -show_packets repro.mp4
> }}}
> With ffmpeg 4.4.1 this would show packet duration as 2 (2/60) but with
> ffmpeg 5.x all the packets get duration 1 (1/60).
>
> The consequences of this can also be observed by remuxing the file:
> {{{
> % ffmpeg -i repro.mp4 -c copy remux.mp4
> }}}
>
> Now the probed duration is no longer 10s but 1/60 less 9.983333.
>
> I think this problem might have appeared after H264 parsing was
> introduced with this commit:
> 8a3f8afa4e46011e9c5849f8e0d57ec9b53deef7
>
> At least I have observed that during the execution of the
> compute_frame_duration function there is now a valid pointer to a
> AVCodecParserContext set but not in the previous version of ffmpeg I ran.
> https://github.com/FFmpeg/FFmpeg/blob/master/libavformat/demux.c#L668
> Thus the heuristic for guessing the frame duration is now taking the
> second branch and going purely on timebase.
>
> Patches should be submitted to the ffmpeg-devel mailing list and not this
> bug tracker.

New description:

 Summary of the bug:
 There appears to be a regression with guesstimation of packet durations in
 ffmpeg v5 compared to v4.4.1. Last tested on ffmpeg master:
 86157f5a25615491c94b0498bf76040b268bad6b

 How to reproduce:
 Create a test file with a frame rate of 30fps with a timescale double
 that.
 {{{
 % ffmpeg -f lavfi -i testsrc=duration=10:size=1728x720:rate=30 -c:v
 libx264 -b:v 1000000 -video_track_timescale 60 -movie_timescale 60
 repro.mp4
 }}}
 Check the duration of the packets with ffprobe:
 {{{
 % ffprobe -show_packets repro.mp4
 }}}
 With ffmpeg 4.4.1 this would show packet duration as 2 (2/60) but with
 ffmpeg 5.x all the packets get duration 1 (1/60).

 The consequences of this can also be observed by remuxing the file:
 {{{
 % ffmpeg -i repro.mp4 -c copy remux.mp4
 }}}

 Now the probed duration is no longer 10s but 1/60 less 9.983333.

 I think this problem might have appeared after H264 parsing was introduced
 with this commit:
 8a3f8afa4e46011e9c5849f8e0d57ec9b53deef7

 At least I have observed that during the execution of the
 compute_frame_duration function there is in ffmpeg5 a valid pointer to a
 AVCodecParserContext set but not in version 4.4.1 of ffmpeg.
 https://github.com/FFmpeg/FFmpeg/blob/master/libavformat/demux.c#L668
 Thus the heuristic for guessing the frame duration is now taking the
 second branch and going purely on timebase.

 Patches should be submitted to the ffmpeg-devel mailing list and not this
 bug tracker.

--
-- 
Ticket URL: <https://trac.ffmpeg.org/ticket/10018#comment:1>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
_______________________________________________
FFmpeg-trac mailing list
FFmpeg-trac@avcodec.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-trac

To unsubscribe, visit link above, or email
ffmpeg-trac-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to