[FFmpeg-trac] #10018(undetermined:new): Duration estimation regression for h264 in mov
FFmpeg
trac at avcodec.org
Wed Nov 9 17:46:24 EET 2022
#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
More information about the FFmpeg-trac
mailing list