Opened 7 years ago
Closed 2 years ago
#5978 closed defect (fixed)
FFprobe calculates timecode wrong with mp4 ntsc framerates
Reported by: | Måns | Owned by: | |
---|---|---|---|
Priority: | normal | Component: | avformat |
Version: | git-master | Keywords: | timecode mov |
Cc: | Blocked By: | ||
Blocking: | Reproduced by developer: | no | |
Analyzed by developer: | no |
Description
Summary of the bug:
Trying to extract timecode from a .mp4 file with a timecode track produced by the standard apple describes here.
FFprobe calculates the timecode wrong, and the drift get greater in later hours.
This problem appears on NTSC framerates only.
Correct timecode at first frame should be 00:02:58:19
How to reproduce:
ffprobe started on 2016-11-24 at 17:22:41 Report written to "ffprobe-20161124-172241.log" Command line: "Q:\\Tools\\Reaper\\ffmpeg\\bin\\ffprobe.exe" -show_streams -of json -report "E:\\SyncTest\\Haze_synctest_60fps_2997TC_v3.MP4" ffprobe version N-82324-g872b358 Copyright (c) 2007-2016 the FFmpeg developers built with gcc 5.4.0 (GCC) configuration: --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-libopenh264 --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. 36.100 / 55. 36.100 libavcodec 57. 66.101 / 57. 66.101 libavformat 57. 57.100 / 57. 57.100 libavdevice 57. 2.100 / 57. 2.100 libavfilter 6. 66.100 / 6. 66.100 libswscale 4. 3.100 / 4. 3.100 libswresample 2. 4.100 / 2. 4.100 libpostproc 54. 2.100 / 54. 2.100 [file @ 0000000002633d40] Setting default whitelist 'file,crypto' [mov,mp4,m4a,3gp,3g2,mj2 @ 0000000002633640] Format mov,mp4,m4a,3gp,3g2,mj2 probed with size=2048 and score=100 [mov,mp4,m4a,3gp,3g2,mj2 @ 0000000002633640] ISO: File Type Major Brand: mp41 [mov,mp4,m4a,3gp,3g2,mj2 @ 0000000002633640] Unknown dref type 0x0873696c61 size 12 [mov,mp4,m4a,3gp,3g2,mj2 @ 0000000002633640] Processing st: 0, edit list 0 - media time: 0, duration: 972972 [mov,mp4,m4a,3gp,3g2,mj2 @ 0000000002633640] Unknown dref type 0x0873696c61 size 12 [mov,mp4,m4a,3gp,3g2,mj2 @ 0000000002633640] Unknown dref type 0x0873696c61 size 12 [mov,mp4,m4a,3gp,3g2,mj2 @ 0000000002633640] Unknown dref type 0x0873696c61 size 12 [mov,mp4,m4a,3gp,3g2,mj2 @ 0000000002633640] Using non-standard frame rate 59/1 [mov,mp4,m4a,3gp,3g2,mj2 @ 0000000002633640] Before avformat_find_stream_info() pos: 61187446 bytes read:96304 seeks:3 nb_streams:4 [h264 @ 0000000002644d60] nal_unit_type: 7, nal_ref_idc: 1 [h264 @ 0000000002644d60] nal_unit_type: 8, nal_ref_idc: 1 [h264 @ 0000000002644d60] nal_unit_type: 9, nal_ref_idc: 0 [h264 @ 0000000002644d60] nal_unit_type: 6, nal_ref_idc: 0 [h264 @ 0000000002644d60] nal_unit_type: 5, nal_ref_idc: 1 [h264 @ 0000000002644d60] ct_type:1 pic_struct:0 [h264 @ 0000000002644d60] Reinit context to 1920x1088, pix_fmt: yuvj420p [h264 @ 0000000002644d60] no picture [mov,mp4,m4a,3gp,3g2,mj2 @ 0000000002633640] Non-increasing DTS in stream 3: packet 2 with DTS 0, packet 3 with DTS 0 [mov,mp4,m4a,3gp,3g2,mj2 @ 0000000002633640] All info found [mov,mp4,m4a,3gp,3g2,mj2 @ 0000000002633640] After avformat_find_stream_info() pos: 340240 bytes read:468907 seeks:4 frames:7 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'E:\SyncTest\Haze_synctest_60fps_2997TC_v3.MP4': Metadata: major_brand : mp41 minor_version : 538120216 compatible_brands: mp41 creation_time : 2015-01-03T00:02:58.000000Z firmware : HD4.01.05.00.00 Duration: 00:00:16.23, start: 0.000000, bitrate: 30151 kb/s Stream #0:0(eng), 1, 1/60000: Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 30028 kb/s, 59.94 fps, 59.94 tbr, 60k tbn, 119.88 tbc (default) Metadata: creation_time : 2015-01-03T00:02:58.000000Z handler_name : GoPro AVC encoder : GoPro AVC encoder timecode : 00:03:01:42 Stream #0:1(eng), 1, 1/48000: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default) Metadata: creation_time : 2015-01-03T00:02:58.000000Z handler_name : GoPro AAC timecode : 00:03:01:42 Stream #0:2(eng), 1, 1/60000: Data: none (tmcd / 0x64636D74), 0 kb/s (default) Metadata: creation_time : 2015-01-03T00:02:58.000000Z handler_name : GoPro TCD timecode : 00:03:01:42 Stream #0:3(eng), 4, 1/60000: Data: none (fdsc / 0x63736466), 13 kb/s (default) Metadata: creation_time : 2015-01-03T00:02:58.000000Z handler_name : GoPro SOS [h264 @ 000000000071e360] nal_unit_type: 7, nal_ref_idc: 1 [h264 @ 000000000071e360] nal_unit_type: 8, nal_ref_idc: 1 Unsupported codec with id 0 for input stream 2 Unsupported codec with id 0 for input stream 3 [AVIOContext @ 000000000263bf20] Statistics: 468907 bytes read, 4 seeks
Patches should be submitted to the ffmpeg-devel mailing list and not this bug tracker.
Attachments (1)
Change History (14)
comment:1 by , 7 years ago
follow-ups: 3 4 comment:2 by , 7 years ago
Keywords: | mov added; mp4 ffprobe removed |
---|---|
Priority: | important → normal |
Do you think this is a regression?
Is the issue only reproducible with ffprobe or also with ffmpeg?
comment:3 by , 7 years ago
Replying to cehoyos:
Do you think this is a regression?
Is the issue only reproducible with ffprobe or also with ffmpeg?
I don't know what you mean with regression?
Same results using ffmpeg -i:
MacBook-Pro:~ Ortner$ /Users/Ortner/Downloads/ffmpeg -i /Users/Ortner/Dropbox/Haze_synctest_60fps_2997TC_v3.MP4 ffmpeg version N-82622-g42ae9c6-tessus Copyright (c) 2000-2016 the FFmpeg developers built with Apple LLVM version 8.0.0 (clang-800.0.42.1) configuration: --cc=/usr/bin/clang --prefix=/opt/ffmpeg --extra-version=tessus --enable-avisynth --enable-fontconfig --enable-gpl --enable-libass --enable-libbluray --enable-libfreetype --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopus --enable-libschroedinger --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzmq --enable-version3 --disable-ffplay --disable-indev=qtkit --disable-indev=x11grab_xcb libavutil 55. 41.101 / 55. 41.101 libavcodec 57. 66.107 / 57. 66.107 libavformat 57. 58.100 / 57. 58.100 libavdevice 57. 2.100 / 57. 2.100 libavfilter 6. 67.100 / 6. 67.100 libswscale 4. 3.101 / 4. 3.101 libswresample 2. 4.100 / 2. 4.100 libpostproc 54. 2.100 / 54. 2.100 [mov,mp4,m4a,3gp,3g2,mj2 @ 0x7ff0b1008600] Using non-standard frame rate 59/1 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/Users/Ortner/Dropbox/Haze_synctest_60fps_2997TC_v3.MP4': Metadata: major_brand : mp41 minor_version : 538120216 compatible_brands: mp41 creation_time : 2015-01-03T00:02:58.000000Z firmware : HD4.01.05.00.00 Duration: 00:00:16.23, start: 0.000000, bitrate: 30151 kb/s Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 30028 kb/s, 59.94 fps, 59.94 tbr, 60k tbn, 119.88 tbc (default) Metadata: creation_time : 2015-01-03T00:02:58.000000Z handler_name : GoPro AVC encoder : GoPro AVC encoder timecode : 00:03:01:42 Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default) Metadata: creation_time : 2015-01-03T00:02:58.000000Z handler_name : GoPro AAC timecode : 00:03:01:42 Stream #0:2(eng): Data: none (tmcd / 0x64636D74), 0 kb/s (default) Metadata: creation_time : 2015-01-03T00:02:58.000000Z handler_name : GoPro TCD timecode : 00:03:01:42 Stream #0:3(eng): Data: none (fdsc / 0x63736466), 13 kb/s (default) Metadata: creation_time : 2015-01-03T00:02:58.000000Z handler_name : GoPro SOS At least one output file must be specified
comment:4 by , 7 years ago
Replying to cehoyos:
Do you think this is a regression?
Is the issue only reproducible with ffprobe or also with ffmpeg?
I don't know what you mean with regression?
Same results using ffmpeg -i:
MacBook-Pro:~ Ortner$ /Users/Ortner/Downloads/ffmpeg -i /Users/Ortner/Dropbox/Haze_synctest_60fps_2997TC_v3.MP4 ffmpeg version N-82622-g42ae9c6-tessus Copyright (c) 2000-2016 the FFmpeg developers built with Apple LLVM version 8.0.0 (clang-800.0.42.1) configuration: --cc=/usr/bin/clang --prefix=/opt/ffmpeg --extra-version=tessus --enable-avisynth --enable-fontconfig --enable-gpl --enable-libass --enable-libbluray --enable-libfreetype --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopus --enable-libschroedinger --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzmq --enable-version3 --disable-ffplay --disable-indev=qtkit --disable-indev=x11grab_xcb libavutil 55. 41.101 / 55. 41.101 libavcodec 57. 66.107 / 57. 66.107 libavformat 57. 58.100 / 57. 58.100 libavdevice 57. 2.100 / 57. 2.100 libavfilter 6. 67.100 / 6. 67.100 libswscale 4. 3.101 / 4. 3.101 libswresample 2. 4.100 / 2. 4.100 libpostproc 54. 2.100 / 54. 2.100 [mov,mp4,m4a,3gp,3g2,mj2 @ 0x7ff0b1008600] Using non-standard frame rate 59/1 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/Users/Ortner/Dropbox/Haze_synctest_60fps_2997TC_v3.MP4': Metadata: major_brand : mp41 minor_version : 538120216 compatible_brands: mp41 creation_time : 2015-01-03T00:02:58.000000Z firmware : HD4.01.05.00.00 Duration: 00:00:16.23, start: 0.000000, bitrate: 30151 kb/s Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 30028 kb/s, 59.94 fps, 59.94 tbr, 60k tbn, 119.88 tbc (default) Metadata: creation_time : 2015-01-03T00:02:58.000000Z handler_name : GoPro AVC encoder : GoPro AVC encoder timecode : 00:03:01:42 Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default) Metadata: creation_time : 2015-01-03T00:02:58.000000Z handler_name : GoPro AAC timecode : 00:03:01:42 Stream #0:2(eng): Data: none (tmcd / 0x64636D74), 0 kb/s (default) Metadata: creation_time : 2015-01-03T00:02:58.000000Z handler_name : GoPro TCD timecode : 00:03:01:42 Stream #0:3(eng): Data: none (fdsc / 0x63736466), 13 kb/s (default) Metadata: creation_time : 2015-01-03T00:02:58.000000Z handler_name : GoPro SOS At least one output file must be specified
follow-up: 6 comment:5 by , 7 years ago
Component: | ffprobe → avformat |
---|
Replying to haze.ortner:
This problem appears on NTSC framerates only.
But the timecode framerate of 59 is not NTSC.
Correct timecode at first frame should be 00:02:58:19
It would be 2:58 if the timecode framerate were 60 instead of 59.
by , 7 years ago
Attachment: | Haze_synctest_60fps_2997TC_v3_cut.mp4 added |
---|
follow-up: 7 comment:6 by , 7 years ago
Replying to cehoyos:
It would be 2:58 if the timecode framerate were 60 instead of 59.
I see, the file is straight from a gopro camera using this gear:
Timecode Systems Syncbac
FCXP, Adobe Premiere CC and Vegas reads the timecode right. Vegas can be off by a frame sometimes.
If you shoot in 60fps on the gopro, the syncbac uses 29.97 ND for timecode.
I have more test files if that helps?
follow-up: 8 comment:7 by , 7 years ago
Replying to haze.ortner:
Replying to cehoyos:
It would be 2:58 if the timecode framerate were 60 instead of 59.
I see, the file is straight from a gopro camera using this gear:
Timecode Systems Syncbac
FCXP, Adobe Premiere CC and Vegas reads the timecode right. Vegas can be off by a frame sometimes.
How can we rule out that they all read the timecode wrong?
If you shoot in 60fps on the gopro, the syncbac uses 29.97 ND for timecode.
I have more test files if that helps?
Files with other timecode framerates may help.
comment:8 by , 7 years ago
Replying to cehoyos:
How can we rule out that they all read the timecode wrong?
I did a spreadsheet with 4 different test files and synced them manually against the audio that I recorded with a SoundDevices 633 which was on the same clock. Then I noted the data, and most times they were straight on or of by a frame. And since I filmed the actual timecode I can see that those programs shows the same timecode that's in the picture.
Files with other timecode framerates may help.
Haze_synctest_25fps_25TC.MP4
Haze_synctest_30fps_2997TC.MP4
Haze_synctest_50fps_25TC.MP4
comment:9 by , 5 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Fixed by Paul in 428b4aacb1a91a267650de644519882a5f700388
comment:10 by , 2 years ago
Davinci says it is 00:02:58:41 and ffmpeg agrees... Nondrop frame, so did this regress too???
All other files here are the same with davinci and ffmpeg but wrong with your image from a synch. device (wtf is that BTW?).
comment:11 by , 2 years ago
Resolution: | fixed |
---|---|
Status: | closed → reopened |
After the latest commit it now changed to
00:03:01:43
While Davinci still thinks 00:02:58:41 is correct.
Regression is 0d666200d30be1643aa46fa67073f257c11937ac.
I suppose due to not recognising interlaced BS.
comment:12 by , 2 years ago
comment:13 by , 2 years ago
Resolution: | → fixed |
---|---|
Status: | reopened → closed |
Behaviour restored in 0a58fdfd3e7a063cc652ddd4510ae064dcdc9de1.
Test Footage: Dropbox Direct Download