#6421 closed defect (fixed)
PTS incorrectly fixed up to be negative
Reported by: | Dan Sanders | Owned by: | Sasi Inguva |
---|---|---|---|
Priority: | important | Component: | undetermined |
Version: | git-master | Keywords: | mov h264 edts regression |
Cc: | Sasi Inguva, Michael Niedermayer | Blocked By: | |
Blocking: | Reproduced by developer: | no | |
Analyzed by developer: | no |
Description
Sample files available from:
https://bugs.chromium.org/p/chromium/issues/detail?id=721451
https://bugs.chromium.org/p/chromium/issues/detail?id=723537
In the three cases reported above (7001A.mp4, MVI_5623.mp4, and nonFormattedMetaData.mp4), the first frame in presentation order is not the first frame in decode order. The metadata correctly records this. However, FFmpeg is reporting that the first frame in decode order is at time 0 (therefore the first frame in presentation order has a negative timestamp).
Example (MVI_5623.mp4):
(edit offset is 40ms) # PTS PTS (after edit) ffprobe pts_time - --- ---------------- ---------------- 0 120 80 0 1 40 0 -80 2 80 40 -40 3 240 200 120 4 160 120 40 5 200 160 80 6 360 320 240 7 280 240 160
(Tested with ffprobe at b946bd8ef2c7aeee09469a4901182a44f9b67189, 2017-05-25)
For comparison, ffprobe at release 2.8.11 reports the expected values:
# PTS PTS (after edit) ffprobe pts_time - --- ---------------- ---------------- 0 120 80 80 1 40 0 0 ...
Change History (9)
comment:1 by , 7 years ago
Cc: | added |
---|---|
Keywords: | mov h264 edts regression added |
Priority: | normal → important |
comment:2 by , 7 years ago
I only found 7001A.mp4 and nonFormattedMetaData.mp4, where can I get MVI_5623.mp4?
MVI_5623.mp4 is linked from the initial user report of the first bug,
https://bugs.chromium.org/p/chromium/issues/detail?id=723537.
Why do you think this is an issue?
The demuxer still reports a track start time of zero. This breaks playback in Chrome, but more importantly it prevents correct A/V sync.
I cannot reproduce negative timestamps with nonFormattedMetaData.mp4
I see that the second PTS is negative with a tip-of-tree build from today:
$ ~/opt/ffmpeg-git/ffprobe -show_packets -select_streams video -i nonFormattedMetaData.mp4 | head -n 30 ffprobe version N-86265-gb946bd8ef2 Copyright (c) 2007-2017 the FFmpeg developers built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.3) configuration: --enable-gpl --enable-libvpx --enable-libx264 libavutil 55. 63.100 / 55. 63.100 libavcodec 57. 96.101 / 57. 96.101 libavformat 57. 72.101 / 57. 72.101 libavdevice 57. 7.100 / 57. 7.100 libavfilter 6. 90.100 / 6. 90.100 libswscale 4. 7.101 / 4. 7.101 libswresample 2. 8.100 / 2. 8.100 libpostproc 54. 6.100 / 54. 6.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'nonFormattedMetaData.mp4': Metadata: major_brand : mp42 minor_version : 1 compatible_brands: mp42avc1CAEP creation_time : 2017-05-25T11:52:00.000000Z Duration: 00:00:32.03, start: 0.000000, bitrate: 4024 kb/s Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720, 3852 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 60k tbc (default) Metadata: creation_time : 2017-05-25T11:52:00.000000Z Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 127 kb/s (default) Metadata: creation_time : 2017-05-25T11:52:00.000000Z [PACKET] codec_type=video stream_index=0 pts=0 pts_time=0.000000 dts=-3003 dts_time=-0.100100 duration=1001 duration_time=0.033367 convergence_duration=N/A convergence_duration_time=N/A size=109271 pos=171912 flags=K_ [/PACKET] [PACKET] codec_type=video stream_index=0 pts=-2002 pts_time=-0.066733 dts=-2002 dts_time=-0.066733 duration=1001 duration_time=0.033367 convergence_duration=N/A convergence_duration_time=N/A size=12534 pos=281183 flags=__ [/PACKET]
comment:5 by , 7 years ago
Owner: | set to |
---|---|
Status: | new → open |
This is a bug in the edit list fix index code. This line http://git.videolan.org/?p=ffmpeg.git;a=blob;f=libavformat/mov.c;h=3845e63b5359a135ea322acd28729dbdb2722019;hb=HEAD#l3087 , causes the PTS to be negative. The intention of the line is to make the first pts to be zero. But the problem here is that the first packet in the decoding order is not the first packet in the presentation order, and in that line we are subtracting by the timestamp of the first packet in decoding order. What we need to do is find the first packet in the presentation order and its resulting PTS after edit list is applied, and then offset all the timestamps to make that PTS zero. I am working on that fix.
You can do -advanced_editlist=0 to disable the fix index feature, but keep in mind that without that feature you will have AVSync issues anyway, because the timestamps are not adjusted properly according to the edit list.
comment:6 by , 7 years ago
Also noting that, this is just a problem for videos starting with open-GOP. i.e. videos where the first frame is the B-frame. (Only then will you have the first ctts to be not zero).
comment:8 by , 7 years ago
Resolution: | → fixed |
---|---|
Status: | open → closed |
Should be fixed in 93db5e3fc41ac0242acab86c3e4ce3a3dfb80075
comment:9 by , 7 years ago
The long commit message may or may not help understanding the issue better, for future bug fixes, please remember to always mention the fixed ticket.
Thank you for working on these reports!
Replying to sandersd:
For future tickets: Please remember to always provide an as-simple-as-possible ffmpeg command line that allows to reproduce the issue together with the complete, uncut console output, do not report issues against ffprobe if they are reproducible with ffmpeg.
Why do you think this is an issue?
I only found 7001A.mp4 and nonFormattedMetaData.mp4, where can I get MVI_5623.mp4?
I cannot reproduce negative timestamps with nonFormattedMetaData.mp4, if there is an issue for 7001A.mp4, it is a regression since ca6cae73db207f17a0d5507609de12842d8f0ca3