[FFmpeg-trac] #3259(undetermined:new): MP4 chapter metadata issues: map_metadata failures and weird/superflous text streams

FFmpeg trac at avcodec.org
Tue Dec 31 05:03:20 CET 2013


#3259: MP4 chapter metadata issues: map_metadata failures and weird/superflous
text streams
-------------------------------------+-------------------------------------
             Reporter:  y3kcjd5      |                     Type:  defect
               Status:  new          |                 Priority:  normal
            Component:               |                  Version:
  undetermined                       |  unspecified
             Keywords:  mp4          |               Blocked By:
  chapters metadata                  |  Reproduced by developer:  0
             Blocking:               |
Analyzed by developer:  0            |
-------------------------------------+-------------------------------------
 OK, I'm having two really annoying problems with chapter metadata in mp4
 files. The first one I'm dearly hoping is just command syntax misuse on my
 part, but I cannot for the life of me find documentation on the subject.
 The second problem involves much more weird behavior. I can't tell if the
 two problems are actually different symptoms of the same cause or not, but
 they both deal with mp4 chapter metadata, so I'm lumping them together for
 now.

 ENVIRONMENT:
 win764bit using latest builds from Zeranoe

 PROBLEM 1:
 If I have an mp4 file (e.g. "metatst.mp4") with chapters in it I can set
 chapter metadata using something like '''-metadata:c:0 title=ch_title'''
 and something like '''-map_metadata:s:0 0:s:0''' or even
 '''-map_metadata:s 0:s''' works, but when I try anything like
 '''-map_metadata:c:0 0:c:0''' I get a fatal error:
 {{{
 ffmpeg started on 2013-12-30 at 22:04:55
 Report written to "ffmpeg-20131230-220455.log"
 Command line:
 ffmpeg -i metatst.mp4 -report -map_metadata:c:0 0:c:0 -c copy metatst2.mp4
 ffmpeg version N-59275-g9b195dd Copyright (c) 2000-2013 the FFmpeg
 developers
   built on Dec 21 2013 22:06:20 with gcc 4.8.2 (GCC)
   configuration: --enable-gpl --enable-version3 --disable-w32threads
 --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r
 --enable-gnutls --enable-iconv --enable-libass --enable-libbluray
 --enable-libcaca --enable-libfreetype --enable-libgsm --enable-libilbc
 --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb
 --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-
 librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex
 --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-
 aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx
 --enable-libwavpack --enable-libx264 --enable-libxavs --enable-libxvid
 --enable-zlib
   libavutil      52. 58.101 / 52. 58.101
   libavcodec     55. 45.103 / 55. 45.103
   libavformat    55. 22.100 / 55. 22.100
   libavdevice    55.  5.102 / 55.  5.102
   libavfilter     4.  0.100 /  4.  0.100
   libswscale      2.  5.101 /  2.  5.101
   libswresample   0. 17.104 /  0. 17.104
   libpostproc    52.  3.100 / 52.  3.100
 Splitting the commandline.
 Reading option '-i' ... matched as input file with argument 'metatst.mp4'.
 Reading option '-report' ... matched as option 'report' (generate a
 report) with argument '1'.
 Reading option '-map_metadata:c:0' ... matched as option 'map_metadata'
 (set metadata information of outfile from infile) with argument '0:c:0'.
 Reading option '-c' ... matched as option 'c' (codec name) with argument
 'copy'.
 Reading option 'metatst2.mp4' ... matched as output file.
 Finished splitting the commandline.
 Parsing a group of options: global .
 Applying option report (generate a report) with argument 1.
 Successfully parsed a group of options.
 Parsing a group of options: input file metatst.mp4.
 Successfully parsed a group of options.
 Opening an input file: metatst.mp4.
 [mov,mp4,m4a,3gp,3g2,mj2 @ 0000000002827680] Format
 mov,mp4,m4a,3gp,3g2,mj2 probed with size=2048 and score=100
 [mov,mp4,m4a,3gp,3g2,mj2 @ 0000000002827680] ISO: File Type Major Brand:
 isom
 [mov,mp4,m4a,3gp,3g2,mj2 @ 0000000002827680] Before
 avformat_find_stream_info() pos: 485573 bytes read:34864 seeks:1
 [h264 @ 0000000000307c80] Detected GBR colorspace.
 [h264 @ 0000000000307c80] no picture
 [mov,mp4,m4a,3gp,3g2,mj2 @ 0000000002827680] All info found
 [mov,mp4,m4a,3gp,3g2,mj2 @ 0000000002827680] After
 avformat_find_stream_info() pos: 7081 bytes read:67632 seeks:2 frames:2
 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'metatst.mp4':
   Metadata:
     major_brand     : isom
     minor_version   : 512
     compatible_brands: isomiso2avc1mp41
     encoder         : Lavf55.22.100
   Duration: 00:00:01.13, start: 0.094000, bitrate: 3446 kb/s
     Chapter #0.0: start 0.000000, end 0.500000
     Metadata:
       title           :
     Chapter #0.1: start 0.500000, end 1.033000
     Metadata:
       title           :
     Stream #0:0(und), 1, 1/24000: Video: h264 (High 4:4:4 Predictive)
 (avc1 / 0x31637661), gbrp(tv, GBR), 1280x720 [SAR 1:1 DAR 16:9], 3030
 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
     Metadata:
       handler_name    : VideoHandler
     Stream #0:1(und), 1, 1/48000: Audio: aac (mp4a / 0x6134706D), 48000
 Hz, stereo, fltp, 410 kb/s (default)
     Metadata:
       handler_name    : SoundHandler
 Successfully opened the file.
 Parsing a group of options: output file metatst2.mp4.
 Applying option map_metadata:c:0 (set metadata information of outfile from
 infile) with argument 0:c:0.
 Applying option c (codec name) with argument copy.
 Successfully parsed a group of options.
 Opening an output file: metatst2.mp4.
 Invalid chapter index 0 while processing metadata maps.
 [AVIOContext @ 0000000004b40da0] Statistics: 0 seeks, 0 writeouts
 [AVIOContext @ 0000000002827c60] Statistics: 67632 bytes read, 2 seeks
 }}}
 Is the syntax for mapping chapter metadata supposed to be different from
 streams and the '''-metadata''' tag somehow? I couldn't find any
 documentation to that effect.

 PROBLEM 2:
 If I try to create an mp4 file with chapters in it and I do not include
 '''-map_metadata:c -1''' in my command line, the resulting file will, for
 some bizarre reason, get a weird text stream tacked on to it invisibly.
 This stream doesn't show up anywhere in the creation log, and cannot be
 edited by ffmpeg in any way (trying to modify or add to its metadata has
 no effect). but a subsequent ffprobe will reveal its presence. My best
 guess is that this 'stream' contains the chapter metadata, but I am
 confounded as to why chapter metadata should show up in its own little
 fake stream while all other metadata is handled transparently. Example
 with '''metatst.mp4''':
 {{{
 ffmpeg started on 2013-12-30 at 22:02:26
 Report written to "ffmpeg-20131230-220226.log"
 Command line:
 ffmpeg -i metatst.mp4 -report -c copy metatst2.mp4
 ffmpeg version N-59275-g9b195dd Copyright (c) 2000-2013 the FFmpeg
 developers
   built on Dec 21 2013 22:06:20 with gcc 4.8.2 (GCC)
   configuration: --enable-gpl --enable-version3 --disable-w32threads
 --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r
 --enable-gnutls --enable-iconv --enable-libass --enable-libbluray
 --enable-libcaca --enable-libfreetype --enable-libgsm --enable-libilbc
 --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb
 --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-
 librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex
 --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-
 aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx
 --enable-libwavpack --enable-libx264 --enable-libxavs --enable-libxvid
 --enable-zlib
   libavutil      52. 58.101 / 52. 58.101
   libavcodec     55. 45.103 / 55. 45.103
   libavformat    55. 22.100 / 55. 22.100
   libavdevice    55.  5.102 / 55.  5.102
   libavfilter     4.  0.100 /  4.  0.100
   libswscale      2.  5.101 /  2.  5.101
   libswresample   0. 17.104 /  0. 17.104
   libpostproc    52.  3.100 / 52.  3.100
 Splitting the commandline.
 Reading option '-i' ... matched as input file with argument 'metatst.mp4'.
 Reading option '-report' ... matched as option 'report' (generate a
 report) with argument '1'.
 Reading option '-c' ... matched as option 'c' (codec name) with argument
 'copy'.
 Reading option 'metatst2.mp4' ... matched as output file.
 Finished splitting the commandline.
 Parsing a group of options: global .
 Applying option report (generate a report) with argument 1.
 Successfully parsed a group of options.
 Parsing a group of options: input file metatst.mp4.
 Successfully parsed a group of options.
 Opening an input file: metatst.mp4.
 [mov,mp4,m4a,3gp,3g2,mj2 @ 0000000000357a60] Format
 mov,mp4,m4a,3gp,3g2,mj2 probed with size=2048 and score=100
 [mov,mp4,m4a,3gp,3g2,mj2 @ 0000000000357a60] ISO: File Type Major Brand:
 isom
 [mov,mp4,m4a,3gp,3g2,mj2 @ 0000000000357a60] Before
 avformat_find_stream_info() pos: 485573 bytes read:34864 seeks:1
 [h264 @ 000000000035b4c0] Detected GBR colorspace.
 [h264 @ 000000000035b4c0] no picture
 [mov,mp4,m4a,3gp,3g2,mj2 @ 0000000000357a60] All info found
 [mov,mp4,m4a,3gp,3g2,mj2 @ 0000000000357a60] After
 avformat_find_stream_info() pos: 7081 bytes read:67632 seeks:2 frames:2
 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'metatst.mp4':
   Metadata:
     major_brand     : isom
     minor_version   : 512
     compatible_brands: isomiso2avc1mp41
     encoder         : Lavf55.22.100
   Duration: 00:00:01.13, start: 0.094000, bitrate: 3446 kb/s
     Chapter #0.0: start 0.000000, end 0.500000
     Metadata:
       title           :
     Chapter #0.1: start 0.500000, end 1.033000
     Metadata:
       title           :
     Stream #0:0(und), 1, 1/24000: Video: h264 (High 4:4:4 Predictive)
 (avc1 / 0x31637661), gbrp(tv, GBR), 1280x720 [SAR 1:1 DAR 16:9], 3030
 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
     Metadata:
       handler_name    : VideoHandler
     Stream #0:1(und), 1, 1/48000: Audio: aac (mp4a / 0x6134706D), 48000
 Hz, stereo, fltp, 410 kb/s (default)
     Metadata:
       handler_name    : SoundHandler
 Successfully opened the file.
 Parsing a group of options: output file metatst2.mp4.
 Applying option c (codec name) with argument copy.
 Successfully parsed a group of options.
 Opening an output file: metatst2.mp4.
 Successfully opened the file.
 Output #0, mp4, to 'metatst2.mp4':
   Metadata:
     major_brand     : isom
     minor_version   : 512
     compatible_brands: isomiso2avc1mp41
     encoder         : Lavf55.22.100
     Chapter #0.0: start 0.094000, end 0.594000
     Metadata:
       title           :
     Chapter #0.1: start 0.594000, end 1.127000
     Metadata:
       title           :
     Stream #0:0(und), 0, 1/24000: Video: h264 ([33][0][0][0] / 0x0021),
 gbrp, 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 3030 kb/s, 23.98 fps, 24k tbn,
 24k tbc (default)
     Metadata:
       handler_name    : VideoHandler
     Stream #0:1(und), 0, 1/48000: Audio: aac ([64][0][0][0] / 0x0040),
 48000 Hz, stereo, 410 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
 No more output streams to write to, finishing.
 frame=   27 fps=0.0 q=-1.0 Lsize=     475kB time=00:00:01.10
 bitrate=3505.7kbits/s

 video:417kB audio:56kB subtitle:0 global headers:0kB muxing overhead
 0.557476%
 0 frames successfully decoded, 0 decoding errors
 [AVIOContext @ 0000000002659ec0] Statistics: 86 seeks, 148 writeouts
 [AVIOContext @ 0000000000358060] Statistics: 520389 bytes read, 2 seeks
 }}}
 {{{
 ffprobe started on 2013-12-30 at 22:02:54
 Report written to "ffprobe-20131230-220254.log"
 Command line:
 ffprobe metatst2.mp4 -report
 ffprobe version N-59275-g9b195dd Copyright (c) 2007-2013 the FFmpeg
 developers
   built on Dec 21 2013 22:06:20 with gcc 4.8.2 (GCC)
   configuration: --enable-gpl --enable-version3 --disable-w32threads
 --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r
 --enable-gnutls --enable-iconv --enable-libass --enable-libbluray
 --enable-libcaca --enable-libfreetype --enable-libgsm --enable-libilbc
 --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb
 --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-
 librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex
 --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-
 aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx
 --enable-libwavpack --enable-libx264 --enable-libxavs --enable-libxvid
 --enable-zlib
   libavutil      52. 58.101 / 52. 58.101
   libavcodec     55. 45.103 / 55. 45.103
   libavformat    55. 22.100 / 55. 22.100
   libavdevice    55.  5.102 / 55.  5.102
   libavfilter     4.  0.100 /  4.  0.100
   libswscale      2.  5.101 /  2.  5.101
   libswresample   0. 17.104 /  0. 17.104
   libpostproc    52.  3.100 / 52.  3.100
 [mov,mp4,m4a,3gp,3g2,mj2 @ 00000000002fc680] Format
 mov,mp4,m4a,3gp,3g2,mj2 probed with size=2048 and score=100
 [mov,mp4,m4a,3gp,3g2,mj2 @ 00000000002fc680] ISO: File Type Major Brand:
 isom
 [mov,mp4,m4a,3gp,3g2,mj2 @ 00000000002fc680] Before
 avformat_find_stream_info() pos: 486124 bytes read:68179 seeks:3
 [h264 @ 000000000030d620] Detected GBR colorspace.
 [h264 @ 000000000030d620] no picture
 [mov,mp4,m4a,3gp,3g2,mj2 @ 00000000002fc680] All info found
 [mov,mp4,m4a,3gp,3g2,mj2 @ 00000000002fc680] After
 avformat_find_stream_info() pos: 7085 bytes read:100947 seeks:4 frames:2
 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'metatst2.mp4':
   Metadata:
     major_brand     : isom
     minor_version   : 512
     compatible_brands: isomiso2avc1mp41
     encoder         : Lavf55.22.100
   Duration: 00:00:01.20, start: 0.000000, bitrate: 3230 kb/s
     Chapter #0.0: start 0.000000, end 0.594000
     Metadata:
       title           :
     Chapter #0.1: start 0.594000, end 1.127000
     Metadata:
       title           :
     Stream #0:0(und), 1, 1/24000: Video: h264 (High 4:4:4 Predictive)
 (avc1 / 0x31637661), gbrp(tv, GBR), 1280x720 [SAR 1:1 DAR 16:9], 3030
 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
     Metadata:
       handler_name    : VideoHandler
     Stream #0:1(und), 1, 1/48000: Audio: aac (mp4a / 0x6134706D), 48000
 Hz, stereo, fltp, 378 kb/s (default)
     Metadata:
       handler_name    : SoundHandler
     Stream #0:2(eng), 0, 1/1000: Subtitle: mov_text (text / 0x74786574), 0
 kb/s
     Metadata:
       handler_name    : SubtitleHandler
 detected 2 logical cores
 [AVIOContext @ 0000000000304ca0] Statistics: 100947 bytes read, 4 seeks
 }}}
 Note the third stream (index 2) that only shows up in the ffprobe report.
 Moreover, as previously mentioned, the only way to prevent this
 weirdostream from appearing is to include '''-map_metadata:c -1''' (or
 '''-map_metadata -1''') in the command line. This means that even if there
 is no actual chapter metadata, one such superfluostream is (aggravatingly)
 still generated by default (as demonstrated above).

--
Ticket URL: <https://trac.ffmpeg.org/ticket/3259>
FFmpeg <http://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list