Opened 7 years ago
Last modified 14 months ago
#6949 open defect
No support for multiple values in ID3v2.4 tags.
Reported by: | escapereality | Owned by: | |
---|---|---|---|
Priority: | normal | Component: | avformat |
Version: | git-master | Keywords: | ID3v2 |
Cc: | Blocked By: | ||
Blocking: | Reproduced by developer: | no | |
Analyzed by developer: | no |
Description
Altough FFmpeg states that it has support for ID3v2.4 tags, there is one thing I can't get to work properly.
The ID3v2.4 specifications state the following:
There may only be one text information frame of its kind in an
tag. All text information frames supports multiple strings, stored
as a null separated list, where null is represented by the
termination code for the character encoding.
When I separate the values in a tag with NULL-characters, the values should all be recognized (following the ID3v2.4 specs). However, when I use FFprobe, it only shows the first value. For example mid3v2 shows the tags correctly.
Below is (a snippet of) the output of both mid3v2 and FFprobe with an example file. The TCON (genre) and TPE1 (artist) contain multiple values.
mid3v2:
mid3v2 --list 01_Infinite_\(Original_Mix\).mp3 IDv2 tag info for 01_Infinite_(Original_Mix).mp3 TALB=Infinite TBPM=150 TCON=Hardstyle / Test / Example / Hard Dance TDRC=2017 TIT2=Infinite (Original Mix) TPE1=B-Front / Second Artist Example TPE2=B-Front TPUB=Roughstate
FFmpeg:
ffprobe 01_Infinite_\(Original_Mix\).mp3 Input #0, mp3, from '01_Infinite_(Original_Mix).mp3': Metadata: title : Infinite (Original Mix) artist : B-Front album : Infinite date : 2017 genre : Hardstyle TBPM : 150 album_artist : B-Front publisher : Roughstate
Verbose console output FFprobe
ffprobe started on 2018-01-07 at 03:20:14 Report written to "ffprobe-20180107-032014.log" Command line: ffprobe -report "01_Infinite_(Original_Mix).mp3" ffprobe version 3.4.1 Copyright (c) 2007-2017 the FFmpeg developers built with gcc 7.2.1 (GCC) 20171128 configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-avisynth --enable-avresample --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libass --enable-libbluray --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-shared --enable-version3 libavutil 55. 78.100 / 55. 78.100 libavcodec 57.107.100 / 57.107.100 libavformat 57. 83.100 / 57. 83.100 libavdevice 57. 10.100 / 57. 10.100 libavfilter 6.107.100 / 6.107.100 libavresample 3. 7. 0 / 3. 7. 0 libswscale 4. 8.100 / 4. 8.100 libswresample 2. 9.100 / 2. 9.100 libpostproc 54. 7.100 / 54. 7.100 [NULL @ 0x55a2b5dcdb20] Opening '01_Infinite_(Original_Mix).mp3' for reading [file @ 0x55a2b5dce520] Setting default whitelist 'file,crypto' [mp3 @ 0x55a2b5dcdb20] Format mp3 probed with size=131072 and score=51 id3v2 ver:4 flags:00 len:108428 [mp3 @ 0x55a2b5dcdb20] pad 576 1211 [mp3 @ 0x55a2b5dcdb20] Skipping 0 bytes of junk at 109482. [mp3 @ 0x55a2b5dcdb20] Before avformat_find_stream_info() pos: 109482 bytes read:131072 seeks:0 nb_streams:2 [mjpeg @ 0x55a2b5dd2480] marker=d8 avail_size_in_buf=94699 [mjpeg @ 0x55a2b5dd2480] marker parser used 0 bytes (0 bits) [mjpeg @ 0x55a2b5dd2480] marker=e0 avail_size_in_buf=94697 [mjpeg @ 0x55a2b5dd2480] marker parser used 16 bytes (128 bits) [mjpeg @ 0x55a2b5dd2480] marker=db avail_size_in_buf=94679 [mjpeg @ 0x55a2b5dd2480] index=0 [mjpeg @ 0x55a2b5dd2480] qscale[0]: 0 [mjpeg @ 0x55a2b5dd2480] marker parser used 67 bytes (536 bits) [mjpeg @ 0x55a2b5dd2480] marker=db avail_size_in_buf=94610 [mjpeg @ 0x55a2b5dd2480] index=1 [mjpeg @ 0x55a2b5dd2480] qscale[1]: 1 [mjpeg @ 0x55a2b5dd2480] marker parser used 67 bytes (536 bits) [mjpeg @ 0x55a2b5dd2480] marker=c0 avail_size_in_buf=94541 [mjpeg @ 0x55a2b5dd2480] Changing bps from 0 to 8 [mjpeg @ 0x55a2b5dd2480] sof0: picture: 600x600 [mjpeg @ 0x55a2b5dd2480] component 0 2:2 id: 0 quant:0 [mjpeg @ 0x55a2b5dd2480] component 1 1:1 id: 1 quant:1 [mjpeg @ 0x55a2b5dd2480] component 2 1:1 id: 2 quant:1 [mjpeg @ 0x55a2b5dd2480] pix fmt id 22111100 [mjpeg @ 0x55a2b5dd2480] marker parser used 17 bytes (136 bits) [mjpeg @ 0x55a2b5dd2480] marker=c4 avail_size_in_buf=94522 [mjpeg @ 0x55a2b5dd2480] marker parser used 0 bytes (0 bits) [mjpeg @ 0x55a2b5dd2480] marker=c4 avail_size_in_buf=94489 [mjpeg @ 0x55a2b5dd2480] marker parser used 0 bytes (0 bits) [mjpeg @ 0x55a2b5dd2480] marker=c4 avail_size_in_buf=94397 [mjpeg @ 0x55a2b5dd2480] marker parser used 0 bytes (0 bits) [mjpeg @ 0x55a2b5dd2480] marker=c4 avail_size_in_buf=94367 [mjpeg @ 0x55a2b5dd2480] marker parser used 0 bytes (0 bits) [mjpeg @ 0x55a2b5dd2480] escaping removed 318 bytes [mjpeg @ 0x55a2b5dd2480] marker=da avail_size_in_buf=94314 [mjpeg @ 0x55a2b5dd2480] marker parser used 93996 bytes (751968 bits) [mjpeg @ 0x55a2b5dd2480] marker=d9 avail_size_in_buf=0 [mjpeg @ 0x55a2b5dd2480] decode frame unused 0 bytes [mp3 @ 0x55a2b5dcdb20] demuxer injecting skip 1105 / discard 0 [mp3 @ 0x55a2b5dd1620] skip 1105 / discard 0 samples due to side data [mp3 @ 0x55a2b5dd1620] skip 1105/1152 samples [mp3 @ 0x55a2b5dcdb20] All info found [mp3 @ 0x55a2b5dcdb20] After avformat_find_stream_info() pos: 162730 bytes read:163840 seeks:0 frames:51 Input #0, mp3, from '01_Infinite_(Original_Mix).mp3': Metadata: title : Infinite (Original Mix) artist : B-Front track : 1 album : Infinite date : 2017 genre : Hardstyle compilation : 0 TBPM : 150 album_artist : B-Front publisher : Roughstate R128_ALBUM_GAIN : 0 R128_TRACK_GAIN : 0 CATALOGNUMBER : ROUGH082 REPLAYGAIN_ALBUM_PEAK: 1.000000 REPLAYGAIN_TRACK_PEAK: 1.000000 REPLAYGAIN_ALBUM_GAIN: -13.24 dB REPLAYGAIN_TRACK_GAIN: -13.24 dB iTunNORM : 0000525E 0000525E 0000CDEC 0000CDEC 00000000 00000000 00008000 00008000 00000000 00000000 Duration: 00:05:00.64, start: 0.025056, bitrate: 322 kb/s Stream #0:0, 50, 1/14112000: Audio: mp3, 44100 Hz, stereo, s16p, 320 kb/s Metadata: encoder : Lavf Side data: replaygain: track gain - -13.240000, track peak - 0.000023, album gain - -13.240000, album peak - 0.000023, Stream #0:1, 1, 1/90000: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 600x600 [SAR 1:1 DAR 1:1], 90k tbr, 90k tbn, 90k tbc Metadata: comment : Cover (front) [AVIOContext @ 0x55a2b5dd6900] Statistics: 163840 bytes read, 0 seeks
Attachments (1)
Change History (12)
comment:1 by , 7 years ago
Component: | undetermined → avformat |
---|---|
Keywords: | ID3v2.4 added; FFprobe libavformat removed |
follow-up: 3 comment:2 by , 7 years ago
Keywords: | ID3v2 added; ID3 ID3v2.4 removed |
---|
comment:3 by , 7 years ago
Replying to cehoyos:
Please test current FFmpeg git head and please provide a sample. Please only report an issue against
ffprobe
if it is not reproducible withffmpeg
.
Allright. It is indeed also reproducible with ffmpeg.
See below for the verbose output of ffmpeg at the latest git head. (ffmpeg -i filename)
ffmpeg started on 2018-01-07 at 11:11:36 Report written to "ffmpeg-20180107-111136.log" Command line: ffmpeg -report -i "01_Infinite_(Original_Mix).mp3" ffmpeg version N-89740-g476665d Copyright (c) 2000-2018 the FFmpeg developers built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.5) 20160609 configuration: libavutil 56. 7.100 / 56. 7.100 libavcodec 58. 9.100 / 58. 9.100 libavformat 58. 3.100 / 58. 3.100 libavdevice 58. 0.100 / 58. 0.100 libavfilter 7. 11.101 / 7. 11.101 libswscale 5. 0.101 / 5. 0.101 libswresample 3. 0.101 / 3. 0.101 Splitting the commandline. Reading option '-report' ... matched as option 'report' (generate a report) with argument '1'. Reading option '-i' ... matched as input url with argument '01_Infinite_(Original_Mix).mp3'. 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 url 01_Infinite_(Original_Mix).mp3. Successfully parsed a group of options. Opening an input file: 01_Infinite_(Original_Mix).mp3. [NULL @ 0x3782580] Opening '01_Infinite_(Original_Mix).mp3' for reading [file @ 0x3782f80] Setting default whitelist 'file,crypto' [mp3 @ 0x3782580] Format mp3 probed with size=131072 and score=51 id3v2 ver:4 flags:00 len:108428 [mp3 @ 0x3782580] pad 576 1211 [mp3 @ 0x3782580] Skipping 0 bytes of junk at 109482. [mp3 @ 0x3782580] Before avformat_find_stream_info() pos: 109482 bytes read:131072 seeks:0 nb_streams:2 [mjpeg @ 0x3786600] marker=d8 avail_size_in_buf=94699 [mjpeg @ 0x3786600] marker parser used 0 bytes (0 bits) [mjpeg @ 0x3786600] marker=e0 avail_size_in_buf=94697 [mjpeg @ 0x3786600] marker parser used 16 bytes (128 bits) [mjpeg @ 0x3786600] marker=db avail_size_in_buf=94679 [mjpeg @ 0x3786600] index=0 [mjpeg @ 0x3786600] qscale[0]: 0 [mjpeg @ 0x3786600] marker parser used 67 bytes (536 bits) [mjpeg @ 0x3786600] marker=db avail_size_in_buf=94610 [mjpeg @ 0x3786600] index=1 [mjpeg @ 0x3786600] qscale[1]: 1 [mjpeg @ 0x3786600] marker parser used 67 bytes (536 bits) [mjpeg @ 0x3786600] marker=c0 avail_size_in_buf=94541 [mjpeg @ 0x3786600] Changing bps from 0 to 8 [mjpeg @ 0x3786600] sof0: picture: 600x600 [mjpeg @ 0x3786600] component 0 2:2 id: 0 quant:0 [mjpeg @ 0x3786600] component 1 1:1 id: 1 quant:1 [mjpeg @ 0x3786600] component 2 1:1 id: 2 quant:1 [mjpeg @ 0x3786600] pix fmt id 22111100 [mjpeg @ 0x3786600] marker parser used 17 bytes (136 bits) [mjpeg @ 0x3786600] marker=c4 avail_size_in_buf=94522 [mjpeg @ 0x3786600] marker parser used 0 bytes (0 bits) [mjpeg @ 0x3786600] marker=c4 avail_size_in_buf=94489 [mjpeg @ 0x3786600] marker parser used 0 bytes (0 bits) [mjpeg @ 0x3786600] marker=c4 avail_size_in_buf=94397 [mjpeg @ 0x3786600] marker parser used 0 bytes (0 bits) [mjpeg @ 0x3786600] marker=c4 avail_size_in_buf=94367 [mjpeg @ 0x3786600] marker parser used 0 bytes (0 bits) [mjpeg @ 0x3786600] escaping removed 318 bytes [mjpeg @ 0x3786600] marker=da avail_size_in_buf=94314 [mjpeg @ 0x3786600] marker parser used 93996 bytes (751968 bits) [mjpeg @ 0x3786600] marker=d9 avail_size_in_buf=0 [mjpeg @ 0x3786600] decode frame unused 0 bytes [mp3 @ 0x3782580] demuxer injecting skip 1105 / discard 0 [mp3 @ 0x3785840] skip 1105 / discard 0 samples due to side data [mp3 @ 0x3785840] skip 1105/1152 samples [mp3 @ 0x3782580] All info found [mp3 @ 0x3782580] After avformat_find_stream_info() pos: 162730 bytes read:163840 seeks:0 frames:51 Input #0, mp3, from '01_Infinite_(Original_Mix).mp3': Metadata: title : Infinite (Original Mix) artist : B-Front track : 1 album : Infinite date : 2017 genre : Hardstyle compilation : 0 TBPM : 150 album_artist : B-Front publisher : Roughstate R128_ALBUM_GAIN : 0 R128_TRACK_GAIN : 0 CATALOGNUMBER : ROUGH082 REPLAYGAIN_ALBUM_PEAK: 1.000000 REPLAYGAIN_TRACK_PEAK: 1.000000 REPLAYGAIN_ALBUM_GAIN: -13.24 dB REPLAYGAIN_TRACK_GAIN: -13.24 dB iTunNORM : 0000525E 0000525E 0000CDEC 0000CDEC 00000000 00000000 00008000 00008000 00000000 00000000 Duration: 00:05:00.64, start: 0.025056, bitrate: 322 kb/s Stream #0:0, 50, 1/14112000: Audio: mp3, 44100 Hz, stereo, s16p, 320 kb/s Metadata: encoder : Lavf Side data: replaygain: track gain - -13.240000, track peak - 0.000023, album gain - -13.240000, album peak - 0.000023, Stream #0:1, 1, 1/90000: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 600x600 [SAR 1:1 DAR 1:1], 90k tbr, 90k tbn, 90k tbc Metadata: comment : Cover (front) Successfully opened the file. At least one output file must be specified [AVIOContext @ 0x378c600] Statistics: 163840 bytes read, 0 seeks
comment:5 by , 7 years ago
Replying to cehoyos:
Please provide a sample.
I've already uploaded a sample with the VideoLan upload tool, is that enough?
by , 7 years ago
Attachment: | multiple_id3v2_4_values.mp3 added |
---|
comment:6 by , 7 years ago
Version: | unspecified → git-master |
---|
comment:7 by , 7 years ago
comment:8 by , 4 years ago
Navidrome, which depends on ffmpeg's tag handling, now runs into this bug:
https://github.com/deluan/navidrome/issues/238#issuecomment-653900039
comment:9 by , 3 years ago
Plex is now affected by this bug. This is a pretty major bug to be languishing for 4 years.
comment:10 by , 2 years ago
Status: | new → open |
---|
comment:11 by , 14 months ago
Anything happening with this patch? It's been 15 months since it was submitted...
Please test current FFmpeg git head and please provide a sample. Please only report an issue against
ffprobe
if it is not reproducible withffmpeg
.