[FFmpeg-trac] #8886(undetermined:new): ID3 headers in segmented mp3 files despite -id3v2_version 0

FFmpeg trac at avcodec.org
Sun Sep 6 23:36:46 EEST 2020


#8886: ID3 headers in segmented mp3 files despite -id3v2_version 0
-------------------------------------+-------------------------------------
             Reporter:  thefsb       |                     Type:  defect
               Status:  new          |                 Priority:  normal
            Component:               |                  Version:  3.2.13
  undetermined                       |
             Keywords:  mp3 segment  |               Blocked By:
  id3v2                              |
             Blocking:               |  Reproduced by developer:  0
Analyzed by developer:  0            |
-------------------------------------+-------------------------------------
 (I prepared the examples here with 3.2.14 in my dev env but I see the same
 behavior with 4.3.1)

 I am trying to save the mp3 data from an shout/icecast-type stream to
 segmented MP3 files.
 I want each MP3 file to have no ID3, XING or other metadata header blocks
 so that it
 would be possible to concatenate a sub-sequence of them to produce a valid
 mp3 file/stream.

 The ffmpeg mp3 muxer docs http://ffmpeg.org/ffmpeg-all.html#mp3 says,
 "Setting id3v2_version to 0 disables the ID3v2 header completely." and has
 an example:

 Write a "clean" MP3 without any extra features:

     ffmpeg -i input.wav -write_xing 0 -id3v2_version 0 out.mp3

 But I find an ID3 block at the beginning of every segment output file.

 {{{

 --------------------------------------------------------------------------------------------------------

 % ffmpeg -v 9 -loglevel 99 \
 > -multiple_requests 1 \
 > -reconnect_at_eof 1 \
 > -reconnect_streamed 1 \
 > -reconnect_delay_max 60 \
 > -icy 0 \
 > -i http://107.182.231.73:7170/ \
 > -map 0:a \
 > -c copy \
 > -map_metadata -1 \
 > -write_xing 0 \
 > -id3v2_version 0 \
 > -write_id3v1 0 \
 > -f segment \
 > -segment_time 60 \
 > -segment_atclocktime 1 \
 > -segment_clocktime_wrap_duration 1 \
 > -strftime 1 \
 > ./FOO-%G%m%dT%H%M%SZ.mp3
 ffmpeg version 3.2.14-1~deb9u1 Copyright (c) 2000-2019 the FFmpeg
 developers
   built with gcc 6.3.0 (Debian 6.3.0-18+deb9u1) 20170516
   configuration: --prefix=/usr --extra-version='1~deb9u1'
 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu
 --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping
 --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa
 --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca
 --enable-libcdio --enable-libebur128 --enable-libflite --enable-
 libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme
 --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-
 libopenmpt --enable-libopus --enable-libpulse --enable-librubberband
 --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex
 --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis
 --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265
 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-
 openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-
 libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv
 --enable-libx264 --enable-shared
   libavutil      55. 34.101 / 55. 34.101
   libavcodec     57. 64.101 / 57. 64.101
   libavformat    57. 56.101 / 57. 56.101
   libavdevice    57.  1.100 / 57.  1.100
   libavfilter     6. 65.100 /  6. 65.100
   libavresample   3.  1.  0 /  3.  1.  0
   libswscale      4.  2.100 /  4.  2.100
   libswresample   2.  3.100 /  2.  3.100
   libpostproc    54.  1.100 / 54.  1.100
 Splitting the commandline.
 Reading option '-v' ... matched as option 'v' (set logging level) with
 argument '9'.
 Reading option '-loglevel' ... matched as option 'loglevel' (set logging
 level) with argument '99'.
 Reading option '-multiple_requests' ... matched as AVOption
 'multiple_requests' with argument '1'.
 Reading option '-reconnect_at_eof' ... matched as AVOption
 'reconnect_at_eof' with argument '1'.
 Reading option '-reconnect_streamed' ... matched as AVOption
 'reconnect_streamed' with argument '1'.
 Reading option '-reconnect_delay_max' ... matched as AVOption
 'reconnect_delay_max' with argument '60'.
 Reading option '-icy' ... matched as AVOption 'icy' with argument '0'.
 Reading option '-i' ... matched as input url with argument
 'http://107.182.231.73:7170/'.
 Reading option '-map' ... matched as option 'map' (set input stream
 mapping) with argument '0:a'.
 Reading option '-c' ... matched as option 'c' (codec name) with argument
 'copy'.
 Reading option '-map_metadata' ... matched as option 'map_metadata' (set
 metadata information of outfile from infile) with argument '-1'.
 Reading option '-write_xing' ... matched as AVOption 'write_xing' with
 argument '0'.
 Reading option '-id3v2_version' ... matched as AVOption 'id3v2_version'
 with argument '0'.
 Reading option '-write_id3v1' ... matched as AVOption 'write_id3v1' with
 argument '0'.
 Reading option '-f' ... matched as option 'f' (force format) with argument
 'segment'.
 Reading option '-segment_time' ... matched as AVOption 'segment_time' with
 argument '60'.
 Reading option '-segment_atclocktime' ... matched as AVOption
 'segment_atclocktime' with argument '1'.
 Reading option '-segment_clocktime_wrap_duration' ... matched as AVOption
 'segment_clocktime_wrap_duration' with argument '1'.
 Reading option '-strftime' ... matched as AVOption 'strftime' with
 argument '1'.
 Reading option './FOO-%G%m%dT%H%M%SZ.mp3' ... matched as output url.
 Finished splitting the commandline.
 Parsing a group of options: global .
 Applying option v (set logging level) with argument 9.
 Successfully parsed a group of options.
 Parsing a group of options: input url http://107.182.231.73:7170/.
 Successfully parsed a group of options.
 Opening an input file: http://107.182.231.73:7170/.
 [NULL @ 0x7fffe09b1100] Opening 'http://107.182.231.73:7170/' for reading
 [http @ 0x7fffe09b1a00] Setting default whitelist
 'http,https,tls,rtp,tcp,udp,crypto,httpproxy'
 [http @ 0x7fffe09b1a00] request: GET / HTTP/1.1
 User-Agent: Lavf/57.56.101
 Accept: */*
 Range: bytes=0-
 Connection: keep-alive
 Host: 107.182.231.73:7170


 [http @ 0x7fffe09b1a00] header='HTTP/1.0 200 OK'
 [http @ 0x7fffe09b1a00] http_code=200
 [http @ 0x7fffe09b1a00] header='icy-notice1:<BR>This stream requires <a
 href="http://www.winamp.com">Winamp</a><BR>'
 [http @ 0x7fffe09b1a00] header='icy-notice2:SHOUTcast DNAS/posix(linux
 x64) v2.5.5.733<BR>'
 [http @ 0x7fffe09b1a00] header='Accept-Ranges:none'
 [http @ 0x7fffe09b1a00] header='Access-Control-Allow-Origin:*'
 [http @ 0x7fffe09b1a00] header='Cache-Control:no-cache,no-store,must-
 revalidate,max-age=0'
 [http @ 0x7fffe09b1a00] header='Connection:close'
 [http @ 0x7fffe09b1a00] header='icy-name:WNMC :: Traverse City'
 [http @ 0x7fffe09b1a00] header='icy-genre:Eclectic'
 [http @ 0x7fffe09b1a00] header='icy-br:192'
 [http @ 0x7fffe09b1a00] header='icy-sr:44100'
 [http @ 0x7fffe09b1a00] header='icy-url:http://www.wnmc.org/'
 [http @ 0x7fffe09b1a00] header='icy-pub:1'
 [http @ 0x7fffe09b1a00] header='content-type:audio/mpeg'
 [http @ 0x7fffe09b1a00] header='X-Clacks-Overhead:GNU Terry Pratchett'
 [http @ 0x7fffe09b1a00] header=''
 Probing mp3 score:25 size:2048
 Probing mp3 score:51 size:4096
 [mp3 @ 0x7fffe09b1100] Format mp3 probed with size=4096 and score=51
 [mp3 @ 0x7fffe09b1100] Skipping 0 bytes of junk at 0.
 [mp3 @ 0x7fffe09b1100] Before avformat_find_stream_info() pos: 0 bytes
 read:25746 seeks:0 nb_streams:1
 [mp3 @ 0x7fffe09b1100] All info found
 [mp3 @ 0x7fffe09b1100] stream 0: start_time: 0.000 duration:
 -653583619391.637
 [mp3 @ 0x7fffe09b1100] format: start_time: 0.000 duration:
 -9223372036854.775 bitrate=192 kb/s
 [mp3 @ 0x7fffe09b1100] After avformat_find_stream_info() pos: 31744 bytes
 read:34524 seeks:0 frames:50
 Input #0, mp3, from 'http://107.182.231.73:7170/':
   Metadata:
     icy-notice1     : <BR>This stream requires <a
 href="http://www.winamp.com">Winamp</a><BR>
     icy-notice2     : SHOUTcast DNAS/posix(linux x64) v2.5.5.733<BR>
     icy-name        : WNMC :: Traverse City
     icy-genre       : Eclectic
     icy-br          : 192
     icy-sr          : 44100
     icy-url         : http://www.wnmc.org/
     icy-pub         : 1
   Duration: N/A, start: 0.000000, bitrate: 192 kb/s
     Stream #0:0, 50, 1/14112000: Audio: mp3, 44100 Hz, stereo, s16p, 192
 kb/s
 Successfully opened the file.
 Parsing a group of options: output url ./FOO-%G%m%dT%H%M%SZ.mp3.
 Applying option map (set input stream mapping) with argument 0:a.
 Applying option c (codec name) with argument copy.
 Applying option map_metadata (set metadata information of outfile from
 infile) with argument -1.
 Applying option f (force format) with argument segment.
 Successfully parsed a group of options.
 Opening an output file: ./FOO-%G%m%dT%H%M%SZ.mp3.
 Successfully opened the file.
 [segment @ 0x7fffe09b5b20] Selected stream id:0 type:audio
 [segment @ 0x7fffe09b5b20] Opening './FOO-20200906T161345Z.mp3' for
 writing
 [file @ 0x7fffe09b6d60] Setting default whitelist 'file,crypto'
 Output #0, segment, to './FOO-%G%m%dT%H%M%SZ.mp3':
   Metadata:
     encoder         : Lavf57.56.101
     Stream #0:0, 0, 1/14112000: Audio: mp3, 44100 Hz, stereo, 192 kb/s
 Stream mapping:
   Stream #0:0 -> #0:0 (copy)
 Press [q] to stop, [?] for help
 cur_dts is invalid (this is harmless if it occurs once at the start per
 stream)
 [segment @ 0x7fffe09b5b20] segment:'./FOO-20200906T161345Z.mp3' starts
 with packet stream:0 pts:0 pts_time:0 frame:0
 [segment @ 0x7fffe09b5b20] stream:0 start_pts_time:0 pts:0 pts_time:0
 dts:0 dts_time:0 -> pts:0 pts_time:0 dts:0 dts_time:0
 [segment @ 0x7fffe09b5b20] stream:0 start_pts_time:0 pts:368640
 pts_time:0.0261224 dts:368640 dts_time:0.0261224 -> pts:368640
 pts_time:0.0261224 dts:368640 dts_time:0.0261224

 --------------------------------------------------------------------------------------------------------

 % ffprobe -hide_banner -report -i FOO-20200906T161600Z.mp3
 ffprobe started on 2020-09-06 at 16:24:21
 Report written to "ffprobe-20200906-162421.log"
 Input #0, mp3, from 'FOO-20200906T161600Z.mp3':
   Metadata:
     encoder         : Lavf57.56.101
   Duration: 00:00:29.34, start: 0.011995, bitrate: 192 kb/s
     Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 192 kb/s
     Metadata:
       encoder         : Lavf

 --------------------------------------------------------------------------------------------------------

 % cat ffprobe-20200906-162421.log
 ffprobe started on 2020-09-06 at 16:24:21
 Report written to "ffprobe-20200906-162421.log"
 Command line:
 ffprobe -hide_banner -report -i FOO-20200906T161600Z.mp3
 [NULL @ 0x7fffea820420] Opening 'FOO-20200906T161600Z.mp3' for reading
 [file @ 0x7fffea820ba0] Setting default whitelist 'file,crypto'
 [mp3 @ 0x7fffea820420] Format mp3 probed with size=4096 and score=51
 [mp3 @ 0x7fffea820420] id3v2 ver:4 flags:00 len:35
 [mp3 @ 0x7fffea820420] pad 0 0
 [mp3 @ 0x7fffea820420] Skipping 0 bytes of junk at 671.
 [mp3 @ 0x7fffea820420] Before avformat_find_stream_info() pos: 671 bytes
 read:32768 seeks:0 nb_streams:1
 [mp3 @ 0x7fffea820420] demuxer injecting skip 529 / discard 0
 [mp3 @ 0x7fffea8218a0] skip 529 / discard 0 samples due to side data
 [mp3 @ 0x7fffea8218a0] skip 529/1152 samples
 [mp3 @ 0x7fffea820420] All info found
 [mp3 @ 0x7fffea820420] After avformat_find_stream_info() pos: 32415 bytes
 read:32768 seeks:0 frames:50
 Input #0, mp3, from 'FOO-20200906T161600Z.mp3':
   Metadata:
     encoder         : Lavf57.56.101
   Duration: 00:00:29.34, start: 0.011995, bitrate: 192 kb/s
     Stream #0:0, 50, 1/14112000: Audio: mp3, 44100 Hz, stereo, s16p, 192
 kb/s
     Metadata:
       encoder         : Lavf
 [AVIOContext @ 0x7fffea828f40] Statistics: 32768 bytes read, 0 seeks

 --------------------------------------------------------------------------------------------------------

 % xxd FOO-20200906T161600Z.mp3 | head -n 20
 00000000: 4944 3304 0000 0000 0023 5453 5345 0000  ID3......#TSSE..
 00000010: 000f 0000 034c 6176 6635 372e 3536 2e31  .....Lavf57.56.1
 00000020: 3031 0000 0000 0000 0000 0000 00ff fbb0  01..............
 00000030: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 00000040: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 00000050: 0049 6e66 6f00 0000 0f00 0004 6300 0ac0  .Info.......c...
 00000060: a600 0205 080b 0d0f 1215 171a 1c1f 2124  ..............!$
 00000070: 2729 2b2e 3134 3538 3b3e 4042 4548 4a4d  ')+.1458;>@BEHJM
 00000080: 4f52 5457 5a5c 5e61 6467 686b 6e71 7375  ORTWZ\^adghknqsu
 00000090: 787b 7d80 8285 878a 8d8f 9194 979a 9c9e  x{}.............
 000000a0: a1a4 a6a8 abae b0b3 b5b8 babd c0c2 c5c7  ................
 000000b0: cacd cfd1 d4d7 d9db dee1 e3e6 e8eb eef0  ................
 000000c0: f3f5 f8fa fd00 0000 004c 6176 6600 0000  .........Lavf...
 000000d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 000000e0: 0000 0000 0000 0ac0 a6b6 4b32 5d00 0000  ..........K2]...
 000000f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 00000100: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 00000110: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 00000120: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 00000130: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 }}}

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


More information about the FFmpeg-trac mailing list