Opened 6 years ago

Last modified 6 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)

multiple_id3v2_4_values.mp3 (786.1 KB ) - added by escapereality 6 years ago.

Download all attachments as: .zip

Change History (12)

comment:1 by escapereality, 6 years ago

Component: undeterminedavformat
Keywords: ID3v2.4 added; FFprobe libavformat removed

comment:2 by Carl Eugen Hoyos, 6 years ago

Keywords: ID3v2 added; ID3 ID3v2.4 removed

Please test current FFmpeg git head and please provide a sample. Please only report an issue against ffprobe if it is not reproducible with ffmpeg.

in reply to:  2 comment:3 by escapereality, 6 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 with ffmpeg.

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:4 by Carl Eugen Hoyos, 6 years ago

Please provide a sample.

in reply to:  4 comment:5 by escapereality, 6 years ago

Replying to cehoyos:

Please provide a sample.

I've already uploaded a sample with the VideoLan upload tool, is that enough?

by escapereality, 6 years ago

Attachment: multiple_id3v2_4_values.mp3 added

comment:6 by escapereality, 6 years ago

Version: unspecifiedgit-master

in reply to:  4 comment:7 by escapereality, 6 years ago

Replying to cehoyos:

Please provide a sample.

Are you able to reproduce this problem?

comment:8 by certuna2, 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

Last edited 4 years ago by certuna2 (previous) (diff)

comment:9 by Ken Dietz, 23 months ago

Plex is now affected by this bug. This is a pretty major bug to be languishing for 4 years.

comment:11 by certuna2, 6 months ago

Anything happening with this patch? It's been 15 months since it was submitted...

Note: See TracTickets for help on using tickets.