Opened 21 months ago
Last modified 14 months ago
#5784 new defect
Regression: mkv encoder DTS discontinuity
Reported by: | mbat | Owned by: | |
---|---|---|---|
Priority: | normal | Component: | avformat |
Version: | git-master | Keywords: | dts mkv edts mov regression |
Cc: | Blocked By: | ||
Blocking: | Reproduced by developer: | no | |
Analyzed by developer: | no |
Description
Summary of the bug:
How to reproduce:
Download sample from here:
https://www.datafilehost.com/d/v5QV9Y2BBg
Input file has no errors. Frames are every 40ms (25fps).
DTS progression is linear: 0 - 40 - 80 - 120 - 160 - 200 - 240 - ...
Run this command line:
ffmpeg -i test.mp4 -c copy test.mkv
Output file has DTS discontinuities at 0, 141 and 160ms.
DTS progression is: 0 - 61 - 101 - 141 - 160 - 221 - ...
DTS timings are in milliseconds.
My test configuration was Windows 7 64 bit.
I'm using Zeranoe build of 2016-08-17 (bba6a03).
Zeranoe build of 2015-02-03 has no issues.
Thanks,
MB
Attachments (1)
Change History (7)
comment:1 Changed 21 months ago by cehoyos
Changed 21 months ago by cehoyos
comment:2 Changed 21 months ago by mbat
Step by step instructions to reproduce DTS errors:
- Download attached sample (test.mp4);
- Run ffmpeg -i test.mp4 -c copy test.mkv;
- Output:
ffmpeg version N-81378-gbba6a03 Copyright (c) 2000-2016 the FFmpeg developers built with gcc 5.4.0 (GCC) configuration: --disable-static --enable-shared --enable-gpl --enable-version3 --disable-w32threads --enable-dxva2 --enable-libmfx --enable-nvenc --enable-avisynth --enable-bzlib --enable-libebur128 --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --enable-decklink --enable-zlib libavutil 55. 28.100 / 55. 28.100 libavcodec 57. 53.100 / 57. 53.100 libavformat 57. 47.101 / 57. 47.101 libavdevice 57. 0.102 / 57. 0.102 libavfilter 6. 52.100 / 6. 52.100 libswscale 4. 1.100 / 4. 1.100 libswresample 2. 1.100 / 2. 1.100 libpostproc 54. 0.100 / 54. 0.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 encoder : Lavf57.47.101 Duration: 00:00:10.02, start: 0.000000, bitrate: 1287 kb/s Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 720x576 [SAR 64:45 DAR 16:9], 1201 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default) Metadata: handler_name : VideoHandler Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 81 kb/s (default) Metadata: handler_name : SoundHandler [matroska @ 023fba20] Using AVStream.codec to pass codec parameters to muxers is deprecated, use AVStream.codecpar instead. Last message repeated 1 times Output #0, matroska, to 'test.mkv': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 encoder : Lavf57.47.101 Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 720x576 [SAR 64:45 DAR 16:9], q=2-31, 1201 kb/s, 25 fps, 25 tbr, 1k tbn, 12800 tbc (default) Metadata: handler_name : VideoHandler Stream #0:1(und): Audio: aac (LC) ([255][0][0][0] / 0x00FF), 48000 Hz, stereo, 81 kb/s (default) Metadata: handler_name : SoundHandler Stream mapping: Stream #0:0 -> #0:0 (copy) Stream #0:1 -> #0:1 (copy) Press [q] to stop, [?] for help frame= 250 fps=0.0 q=-1.0 Lsize= 1572kB time=00:00:10.00 bitrate=1287.0kbits/s speed= 592x video:1466kB audio:100kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.370809%
- Since video track has been copied (-c copy) PTS, DTS and all timecodes of video track must be the same (timebase apart);
- But...this is not what I've found;
- Run ffprobe -show_frames test.mkv > mkv.txt and ffprobe -show_frames test.mp4 > mp4.txt;
- Open the .txt files previously generated;
- Extract pkt_dts_time fields of video track;
- For mp4.txt you'll find (diffs in ms on side):
pkt_dts_time=0.000000 pkt_dts_time=0.040000 40 pkt_dts_time=0.080000 40 pkt_dts_time=0.120000 40 pkt_dts_time=0.160000 40 pkt_dts_time=0.200000 40 ...
- For mkv.txt you'll find (diffs in ms on side):
pkt_dts_time=0.000000 pkt_dts_time=0.061000 61 pkt_dts_time=0.101000 40 pkt_dts_time=0.141000 40 pkt_dts_time=0.160000 19 pkt_dts_time=0.221000 61 ...
As you can see, DTS in .mkv is not regular like in .mp4. With old ffmpeg builds (2015-02-03 i.e.), it was.
Thanks,
MB
comment:3 Changed 21 months ago by cehoyos
- Keywords mov added
Behaviour has changed several times:
Before 9d4fdfe24c731d1880797dee65365154b41c1dea (related to #4487): 0.080000, 0.120000, 0.160000, 0.200000, 0.240000
Before 65efcaeb8467f5aff25eaf02b20dae43d5ca9dc7 (related to #2324, #2325): 0.021000, 0.061000, 0.101000, 0.141000, 0.181000
comment:4 Changed 20 months ago by cehoyos
- Keywords dts added
comment:5 Changed 15 months ago by cehoyos
- Keywords edts added
comment:6 Changed 14 months ago by isasi
This file has the same behavior even before the edit list patch http://git.videolan.org/?p=ffmpeg.git;a=commit;h=ca6cae73db207f17a0d5507609de12842d8f0ca3 . Something wrong in matroska muxer.
Please provide the command line that allows to reproduce the issue together with the complete, uncut console output to make this a valid ticket and please explain how the reproduce the "dts discontinuities".