[FFmpeg-trac] #3453(avformat:new): Mov timecode track duration incorrect
FFmpeg
trac at avcodec.org
Wed Mar 12 11:09:53 CET 2014
#3453: Mov timecode track duration incorrect
----------------------------------+--------------------------------------
Reporter: bmcleod | Type: defect
Status: new | Priority: minor
Component: avformat | Version: git-master
Keywords: mov tmcd | Blocked By:
Blocking: | Reproduced by developer: 0
Analyzed by developer: 0 |
----------------------------------+--------------------------------------
When muxing mov files containing a timecode track the duration of the
timecode stream on the output is wrong, differences in the timescale
between video and timecode are not accounted for.
The example file is a minute long and has a timecode track (note the
duration of the video and timecode tracks are the same)
{{{
ffprobe -show_streams -print_format xml mov_with_tmcd.mov 2>/dev/null
<?xml version="1.0" encoding="UTF-8"?>
<ffprobe>
<streams>
<stream index="0" codec_name="h264" codec_long_name="H.264 / AVC /
MPEG-4 AVC / MPEG-4 part 10" profile="High" codec_type="video"
codec_time_base="1/50" codec_tag_string="avc1" codec_tag="0x31637661"
width="720" height="576" has_b_frames="2" sample_aspect_ratio="0:1"
display_aspect_ratio="0:1" pix_fmt="yuv420p" level="30"
r_frame_rate="25/1" avg_frame_rate="25/1" time_base="1/25" start_pts="0"
start_time="0.000000" duration_ts="1502" duration="60.080000"
bit_rate="81100" nb_frames="1502">
<disposition default="1" dub="0" original="0" comment="0"
lyrics="0" karaoke="0" forced="0" hearing_impaired="0" visual_impaired="0"
clean_effects="0" attached_pic="0"/>
<tag key="language" value="eng"/>
<tag key="handler_name" value="DataHandler"/>
<tag key="timecode" value="00:00:00:00"/>
</stream>
<stream index="1" codec_name="pcm_s16le" codec_long_name="PCM
signed 16-bit little-endian" codec_type="audio" codec_time_base="1/48000"
codec_tag_string="sowt" codec_tag="0x74776f73" sample_fmt="s16"
sample_rate="48000" channels="2" channel_layout="stereo"
bits_per_sample="16" r_frame_rate="0/0" avg_frame_rate="0/0"
time_base="1/48000" start_pts="0" start_time="0.000000"
duration_ts="2880000" duration="60.000000" bit_rate="1536000"
nb_frames="2880000">
<disposition default="1" dub="0" original="0" comment="0"
lyrics="0" karaoke="0" forced="0" hearing_impaired="0" visual_impaired="0"
clean_effects="0" attached_pic="0"/>
<tag key="language" value="eng"/>
<tag key="handler_name" value="DataHandler"/>
</stream>
<stream index="2" codec_type="data" codec_time_base="1/25"
codec_tag_string="tmcd" codec_tag="0x64636d74" r_frame_rate="0/0"
avg_frame_rate="0/0" time_base="1/25" start_pts="0" start_time="0.000000"
duration_ts="1502" duration="60.080000" bit_rate="798" nb_frames="1500">
<disposition default="0" dub="0" original="0" comment="0"
lyrics="0" karaoke="0" forced="0" hearing_impaired="0" visual_impaired="0"
clean_effects="0" attached_pic="0"/>
<tag key="language" value="eng"/>
<tag key="handler_name" value="DataHandler"/>
<tag key="timecode" value="00:00:00:00"/>
</stream>
</streams>
</ffprobe>
}}}
The file is remuxed using ffmpeg
{{{
ffmpeg -report -i mov_with_tmcd.mov -vcodec copy -acodec copy -dcodec
copy -map 0:v -map 0:a -map 0:d out_git_head.mov
ffmpeg started on 2014-03-12 at 09:19:43
Report written to "ffmpeg-20140312-091943.log"
ffmpeg version N-61313-g1f36ebf Copyright (c) 2000-2014 the FFmpeg
developers
built on Mar 12 2014 09:16:27 with gcc 4.8 (Ubuntu/Linaro
4.8.1-10ubuntu9)
configuration: --enable-swscale --enable-avfilter --enable-avresample
--enable-postproc --enable-libmp3lame --enable-libopenjpeg --enable-
libbluray --enable-libx264 --enable-libfaac --enable-gpl --enable-version3
--enable-nonfree --enable-gnutls --enable-pthreads --arch=x86_64 --enable-
yasm --enable-optimizations --disable-static --enable-shared --extra-
cxxflags='"-fPIC"' --extra-cflags='"-march=native"'
libavutil 52. 66.101 / 52. 66.101
libavcodec 55. 52.102 / 55. 52.102
libavformat 55. 34.100 / 55. 34.100
libavdevice 55. 11.100 / 55. 11.100
libavfilter 4. 3.100 / 4. 3.100
libavresample 1. 2. 0 / 1. 2. 0
libswscale 2. 5.101 / 2. 5.101
libswresample 0. 18.100 / 0. 18.100
libpostproc 52. 3.100 / 52. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'mov_with_tmcd.mov':
Metadata:
major_brand : qt
minor_version : 512
compatible_brands: qt
encoder : Lavf55.34.100
Duration: 00:01:00.08, start: 0.000000, bitrate: 1626 kb/s
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p,
720x576, 81 kb/s, 25 fps, 25 tbr, 25 tbn, 50 tbc (default)
Metadata:
handler_name : DataHandler
timecode : 00:00:00:00
Stream #0:1(eng): Audio: pcm_s16le (sowt / 0x74776F73), 48000 Hz,
stereo, s16, 1536 kb/s (default)
Metadata:
handler_name : DataHandler
Stream #0:2(eng): Data: none (tmcd / 0x64636D74), 0 kb/s
Metadata:
handler_name : DataHandler
timecode : 00:00:00:00
[mov @ 0x10b30c0] You requested a copy of the original timecode track so
timecode metadata are now ignored
Output #0, mov, to 'out_git_head.mov':
Metadata:
major_brand : qt
minor_version : 512
compatible_brands: qt
encoder : Lavf55.34.100
Stream #0:0(eng): Video: h264 (avc1 / 0x31637661), yuv420p, 720x576,
q=2-31, 81 kb/s, 25 fps, 12800 tbn, 25 tbc (default)
Metadata:
handler_name : DataHandler
timecode : 00:00:00:00
Stream #0:1(eng): Audio: pcm_s16le (sowt / 0x74776F73), 48000 Hz,
stereo, 1536 kb/s (default)
Metadata:
handler_name : DataHandler
Stream #0:2(eng): Data: none (tmcd / 0x64636D74), 0 kb/s
Metadata:
handler_name : DataHandler
timecode : 00:00:00:00
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)
Stream #0:2 -> #0:2 (copy)
Press [q] to stop, [?] for help
frame= 1502 fps=0.0 q=-1.0 Lsize= 11929kB time=00:01:00.00
bitrate=1628.7kbits/s
video:595kB audio:11250kB subtitle:0 data:6 global headers:0kB muxing
overhead 0.658521%
}}}
The duration of the timecode stream in the output is 30760.960000 (8h
32mn)
{{{
ffprobe -show_streams -print_format xml out_git_head.mov 2>/dev/null
<?xml version="1.0" encoding="UTF-8"?>
<ffprobe>
<streams>
<stream index="0" codec_name="h264" codec_long_name="H.264 / AVC /
MPEG-4 AVC / MPEG-4 part 10" profile="High" codec_type="video"
codec_time_base="1/50" codec_tag_string="avc1" codec_tag="0x31637661"
width="720" height="576" has_b_frames="2" sample_aspect_ratio="0:1"
display_aspect_ratio="0:1" pix_fmt="yuv420p" level="30"
r_frame_rate="25/1" avg_frame_rate="25/1" time_base="1/12800"
start_pts="0" start_time="0.000000" duration_ts="769024"
duration="60.080000" bit_rate="81100" nb_frames="1502">
<disposition default="1" dub="0" original="0" comment="0"
lyrics="0" karaoke="0" forced="0" hearing_impaired="0" visual_impaired="0"
clean_effects="0" attached_pic="0"/>
<tag key="language" value="eng"/>
<tag key="handler_name" value="DataHandler"/>
<tag key="timecode" value="00:00:00:00"/>
</stream>
<stream index="1" codec_name="pcm_s16le" codec_long_name="PCM
signed 16-bit little-endian" codec_type="audio" codec_time_base="1/48000"
codec_tag_string="sowt" codec_tag="0x74776f73" sample_fmt="s16"
sample_rate="48000" channels="2" channel_layout="stereo"
bits_per_sample="16" r_frame_rate="0/0" avg_frame_rate="0/0"
time_base="1/48000" start_pts="0" start_time="0.000000"
duration_ts="2880000" duration="60.000000" bit_rate="1536000"
nb_frames="2880000">
<disposition default="1" dub="0" original="0" comment="0"
lyrics="0" karaoke="0" forced="0" hearing_impaired="0" visual_impaired="0"
clean_effects="0" attached_pic="0"/>
<tag key="language" value="eng"/>
<tag key="handler_name" value="DataHandler"/>
</stream>
<stream index="2" codec_type="data" codec_time_base="1/25"
codec_tag_string="tmcd" codec_tag="0x64636d74" r_frame_rate="0/0"
avg_frame_rate="0/0" time_base="1/25" start_pts="0" start_time="0.000000"
duration_ts="769024" duration="30760.960000" bit_rate="800"
nb_frames="1500">
<disposition default="0" dub="0" original="0" comment="0"
lyrics="0" karaoke="0" forced="0" hearing_impaired="0" visual_impaired="0"
clean_effects="0" attached_pic="0"/>
<tag key="language" value="eng"/>
<tag key="handler_name" value="DataHandler"/>
<tag key="timecode" value="00:00:00:00"/>
</stream>
</streams>
</ffprobe>
}}}
If the input file has the same timebase on the video and data tracks then
this issue can be worked around using the -video_track_timescale option
for movenc
--
Ticket URL: <https://trac.ffmpeg.org/ticket/3453>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list