Optimise the parse of multi-valued tag for track artist

https://trac.ffmpeg.org/ticket/6949
It is related to support-for-release-type-embedded-tags

The patch was commited in lavf/id3v2dec: support multiple values and TIPL frames · FFmpeg/FFmpeg@80b77e8 · GitHub, but in my test case, the problem in ticket still exists,

ffprobe -i "F:\Downloads\multiple_id3_values.mp3"
ffprobe version 2025-04-21-git-9e1162bdf1-full_build-www.gyan.dev Copyright (c) 2007-2025 the FFmpeg developers
  built with gcc 14.2.0 (Rev3, Built by MSYS2 project)
  configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-lcms2 --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-libdvdnav --enable-libdvdread --enable-sdl2 --enable-libaribb24 --enable-libaribcaption --enable-libdav1d --enable-libdavs2 --enable-libopenjpeg --enable-libquirc --enable-libuavs3d --enable-libxevd --enable-libzvbi --enable-libqrencode --enable-librav1e --enable-libsvtav1 --enable-libvvenc --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxeve --enable-libxvid --enable-libaom --enable-libjxl --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-dxva2 --enable-d3d11va --enable-d3d12va --enable-ffnvcodec --enable-libvpl --enable-nvdec --enable-nvenc --enable-vaapi --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libcodec2 --enable-libilbc --enable-libgsm --enable-liblc3 --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
  libavutil      60.  2.100 / 60.  2.100
  libavcodec     62.  0.101 / 62.  0.101
  libavformat    62.  0.100 / 62.  0.100
  libavdevice    62.  0.100 / 62.  0.100
  libavfilter    11.  0.100 / 11.  0.100
  libswscale      9.  0.100 /  9.  0.100
  libswresample   6.  0.100 /  6.  0.100
  libpostproc    59.  1.100 / 59.  1.100
Input #0, mp3, from 'F:\Downloads\multiple_id3_values.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.60, start: 0.025056, bitrate: 322 kb/s
  Stream #0:0: Audio: mp3 (mp3float), 44100 Hz, stereo, fltp, 320 kb/s, Start-Time 0.025s
    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: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 600x600 [SAR 1:1 DAR 1:1], 90k tbr, 90k tbn, Start-Time 0.025s (attached pic)
    Metadata:
      comment         : Cover (front)

The test mp3 file is here

Plex has no support for multiple Artists. The above patch doesn’t change this fundamental restriction.

Plex now does not support multiple album artist, but multiple artist of a track like name1, name2 is supported, we need name1; name2 be supported too.

We’ve had this patch in our version of FFMPEG for a while already, it was made by one of our devs at the time and looks like it got accepted upstream now too.

Your example file reads the multiple tags correctly with the Plex Transcoder.

ffmpeg version 1c96867-c7c51eae1050ee8a09ae8dc1 Copyright (c) 2000-2022 the FFmpeg developers
  built with Plex clang version 11.0.1 (https://plex.tv 9b997da8e5b47bdb4a9425b3a3b290be393b4b1f)
  configuration: --disable-static --enable-shared --disable-libx264 --disable-hwaccels --disable-protocol=concat --external-decoder=h264 --enable-debug --enable-muxers --enable-libxml2 --fatal-warnings --disable-gmp --disable-avdevice --disable-bzlib --disable-sdl2 --disable-decoders --disable-devices --disable-encoders --disable-ffprobe --disable-ffplay --disable-doc --disable-iconv --disable-lzma --disable-schannel --disable-linux-perf --disable-mediacodec --enable-eae --disable-protocol='udp,udplite' --arch=x86_64 --target-os=linux --strip=true --cc=x86_64-linux-musl-clang --pkg-config=/home/runner/_work/plex-conan/plex-conan/plexconantool/plex-pkg-config --pkg-config-flags=--static --windres=llvm-windres --enable-cuda-llvm --enable-libdrm --enable-opencl --enable-cross-compile --ar=llvm-ar --nm=llvm-nm --ranlib=llvm-ranlib --extra-ldflags='-Wl,-rpath,/home/runner/_work/plex-conan/plex-conan/.conan/data/libpciaccess/0.17-6/plex/main/package/7763a87432c78a82fd36373080b064286892cea3/lib -Wl,-rpath,/home/runner/_work/plex-conan/plex-conan/.conan/data/libdrm/2.4.120-4/plex/main/package/ba4ee9fcf280d38ea7457f18301aac09908b7976/lib -Wl,-rpath,/home/runner/_work/plex-conan/plex-conan/.conan/data/intel-gmmlib/22.3.19-0/plex/main/package/d7d5d1f35ff92a8c39da6b47605055e839a42a9c/lib -Wl,-rpath,/home/runner/_work/plex-conan/plex-conan/.conan/data/libva/2.21.0-7/plex/main/package/f0f4893209b867ce448a96e25ef4d6b158311557/lib -Wl,-rpath,/home/runner/_work/plex-conan/plex-conan/.conan/data/iconv/1.16-36/plex/main/package/da4999666f4b1709dd93ae40fffdb2c6f130b23f/lib -Wl,-rpath,/home/runner/_work/plex-conan/plex-conan/.conan/data/openssl/3.1.1-2cf4e90-4/plex/main/package/121b5d655884b039b2c06c747f3d73ef7b698b66/lib -Wl,-rpath,/home/runner/_work/plex-conan/plex-conan/.conan/data/libpciaccess/0.17-6/plex/main/package/7763a87432c78a82fd36373080b064286892cea3/lib -Wl,-rpath,/home/runner/_work/plex-conan/plex-conan/.conan/data/libdrm/2.4.120-4/plex/main/package/ba4ee9fcf280d38ea7457f18301aac09908b7976/lib -Wl,-rpath,/home/runner/_work/plex-conan/plex-conan/.conan/data/intel-gmmlib/22.3.19-0/plex/main/package/d7d5d1f35ff92a8c39da6b47605055e839a42a9c/lib -Wl,-rpath,/home/runner/_work/plex-conan/plex-conan/.conan/data/libva/2.21.0-7/plex/main/package/f0f4893209b867ce448a96e25ef4d6b158311557/lib -Wl,-rpath,/home/runner/_work/plex-conan/plex-conan/.conan/data/iconv/1.16-36/plex/main/package/da4999666f4b1709dd93ae40fffdb2c6f130b23f/lib -Wl,-rpath,/home/runner/_work/plex-conan/plex-conan/.conan/data/openssl/3.1.1-2cf4e90-4/plex/main/package/121b5d655884b039b2c06c747f3d73ef7b698b66/lib -m64 -L/home/runner/_work/plex-conan/plex-conan/.conan/data/opus/1.2.1-38/plex/main/package/64edc78a49b81c2615dad7b22a9ac90cc029860a/lib -L/home/runner/_work/plex-conan/plex-conan/.conan/data/libvorbis/1.3.5-42/plex/main/package/76eba14299c6c14bf4759b1da21aec07c9ca1a2f/lib -L/home/runner/_work/plex-conan/plex-conan/.conan/data/dav1d/1.0.0-18/plex/main/package/4d954bcc6be6a68b775ef1b1bae9dd65e4e237ff/lib -L/home/runner/_work/plex-conan/plex-conan/.conan/data/ffnvcodec/11.1.5.3-43d9170-0/plex/main/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/lib -L/home/runner/_work/plex-conan/plex-conan/.conan/data/openssl/3.1.1-2cf4e90-4/plex/main/package/121b5d655884b039b2c06c747f3d73ef7b698b66/lib -L/home/runner/_work/plex-conan/plex-conan/.conan/data/x264/161-1086f45-33/plex/main/package/64edc78a49b81c2615dad7b22a9ac90cc029860a/lib -L/home/runner/_work/plex-conan/plex-conan/.conan/data/zvbi/0.2.35-64/plex/main/package/7366a567f554439fb9e7a3415c9d1c2ea2b75360/lib -L/home/runner/_work/plex-conan/plex-conan/.conan/data/libass/0.17.3-4/plex/main/package/d81dbed7e8ad560c9ec55240308ceb55b203927d/lib -L/home/runner/_work/plex-conan/plex-conan/.conan/data/mp3lame/3.98.4-37/plex/main/package/64edc78a49b81c2615dad7b22a9ac90cc029860a/lib -L/home/runner/_work/plex-conan/plex-conan/.conan/data/intel-media-driver/24.1.5-8/plex/main/package/692c8a3a5ee1dcef32efca7f6d273cefdb94118c/lib -L/home/runner/_work/plex-conan/plex-conan/.conan/data/intel-vaapi-driver/2.4.1-45/plex/main/package/72e89cd6576e82e7fa9cf563da5f492cd43a05f4/lib -L/home/runner/_work/plex-conan/plex-conan/.conan/data/opencl-icd-loader/v2024.05.08-861b68b-0/plex/main/package/ce07721293871305120600790e13d0480da9bff7/lib -L/home/runner/_work/plex-conan/plex-conan/.conan/data/libogg/1.3.2-38/plex/main/package/64edc78a49b81c2615dad7b22a9ac90cc029860a/lib -L/home/runner/_work/plex-conan/plex-conan/.conan/data/iconv/1.16-36/plex/main/package/da4999666f4b1709dd93ae40fffdb2c6f130b23f/lib -L/home/runner/_work/plex-conan/plex-conan/.conan/data/fribidi/1.0.12-6/plex/main/package/464531ac2a3f2ab2167bd10d1214603bc8116983/lib -L/home/runner/_work/plex-conan/plex-conan/.conan/data/harfbuzz/4.2.1-9/plex/main/package/53415d552ac96104f622ffa8d8530937a40b4271/lib -L/home/runner/_work/plex-conan/plex-conan/.conan/data/libva/2.21.0-7/plex/main/package/f0f4893209b867ce448a96e25ef4d6b158311557/lib -L/home/runner/_work/plex-conan/plex-conan/.conan/data/intel-gmmlib/22.3.19-0/plex/main/package/d7d5d1f35ff92a8c39da6b47605055e839a42a9c/lib -L/home/runner/_work/plex-conan/plex-conan/.conan/data/fontconfig/2.14.0-9/plex/main/package/aacc2a7710dfa87ed80d4eea45b80c93243fe456/lib -L/home/runner/_work/plex-conan/plex-conan/.conan/data/libdrm/2.4.120-4/plex/main/package/ba4ee9fcf280d38ea7457f18301aac09908b7976/lib -L/home/runner/_work/plex-conan/plex-conan/.conan/data/libxml2/2.9.11-e1bcffea-17/plex/main/package/33406d37abb556848190dcd6097a9849aa894baf/lib -L/home/runner/_work/plex-conan/plex-conan/.conan/data/freetype2/2.12.1-30/plex/main/package/82a00e1e4cc2e8878bb79ae9b5e2235fd8280e6a/lib -L/home/runner/_work/plex-conan/plex-conan/.conan/data/expat/2.6.4-0/plex/main/package/64edc78a49b81c2615dad7b22a9ac90cc029860a/lib -L/home/runner/_work/plex-conan/plex-conan/.conan/data/libuuid/1.0.3-32/plex/main/package/841d526523d3550ac4d52807df94cbbedce37e2c/lib -L/home/runner/_work/plex-conan/plex-conan/.conan/data/libpciaccess/0.17-6/plex/main/package/7763a87432c78a82fd36373080b064286892cea3/lib -L/home/runner/_work/plex-conan/plex-conan/.conan/data/libpthread-stubs/0.4-39/plex/main/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/lib -L/home/runner/_work/plex-conan/plex-conan/.conan/data/bzip2/1.0.6-42/plex/main/package/618bb3c469051b52e1349cf1a297263df374d15a/lib -L/home/runner/_work/plex-conan/plex-conan/.conan/data/libpng/1.6.37-45/plex/main/package/33406d37abb556848190dcd6097a9849aa894baf/lib -L/home/runner/_work/plex-conan/plex-conan/.conan/data/zlib/1.2.11-36/plex/main/package/64edc78a49b81c2615dad7b22a9ac90cc029860a/lib -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -g2 -gdwarf-4 -Wl,--build-id=sha1 -flto=thin -fwhole-program-vtables -Wl,--icf=all -Wl,--threads=6 -Wl,-O2 -l:libgcompat.so.0 -Wl,-rpath,'\''XORIGIN/../lib'\'' -Wl,-rpath,'\''XORIGIN/lib'\'' -Wl,--thinlto-cache-dir=/home/runner/_work/plex-conan/plex-conan/.conan/data/ffmpeg/2.0-1c9686755d-0/plex/main/build/d17660f7512a62e64743f73949dbd3a0155eeb35/lto_cache/' --extra-libs= --enable-decoder=png --enable-decoder=apng --enable-decoder=bmp --enable-decoder=mjpeg --enable-decoder=thp --enable-decoder=gif --enable-decoder=dirac --enable-decoder=ffv1 --enable-decoder=ffvhuff --enable-decoder=huffyuv --enable-decoder=libdav1d --enable-decoder=av1 --enable-decoder=rawvideo --enable-decoder=zero12v --enable-decoder=ayuv --enable-decoder=r210 --enable-decoder=v210 --enable-decoder=v210x --enable-decoder=v308 --enable-decoder=v408 --enable-decoder=v410 --enable-decoder=y41p --enable-decoder=yuv4 --enable-decoder=ansi --enable-decoder=alac --enable-decoder=flac --enable-decoder=vorbis --enable-decoder=opus --enable-decoder=pcm_f32be --enable-decoder=pcm_f32le --enable-decoder=pcm_f64be --enable-decoder=pcm_f64le --enable-decoder=pcm_lxf --enable-decoder=pcm_s16be --enable-decoder=pcm_s16be_planar --enable-decoder=pcm_s16le --enable-decoder=pcm_s16le_planar --enable-decoder=pcm_s24be --enable-decoder=pcm_s24le --enable-decoder=pcm_s24le_planar --enable-decoder=pcm_s32be --enable-decoder=pcm_s32le --enable-decoder=pcm_s32le_planar --enable-decoder=pcm_s8 --enable-decoder=pcm_s8_planar --enable-decoder=pcm_u16be --enable-decoder=pcm_u16le --enable-decoder=pcm_u24be --enable-decoder=pcm_u24le --enable-decoder=pcm_u32be --enable-decoder=pcm_u32le --enable-decoder=pcm_u8 --enable-decoder=pcm_alaw --enable-decoder=pcm_mulaw --enable-decoder=ass --enable-decoder=dvbsub --enable-decoder=dvdsub --enable-decoder=ccaption --enable-decoder=pgssub --enable-decoder=jacosub --enable-decoder=microdvd --enable-decoder=movtext --enable-decoder=mpl2 --enable-decoder=pjs --enable-decoder=realtext --enable-decoder=sami --enable-decoder=ssa --enable-decoder=stl --enable-decoder=subrip --enable-decoder=subviewer --enable-decoder=text --enable-decoder=vplayer --enable-decoder=webvtt --enable-decoder=xsub --enable-decoder=eac3_eae --enable-decoder=truehd_eae --enable-decoder=mlp_eae --enable-encoder=flac --enable-encoder=alac --enable-encoder=libvorbis --enable-encoder=libopus --enable-encoder=mjpeg --enable-encoder=png --enable-encoder=rawvideo --enable-encoder=wrapped_avframe --enable-encoder=ass --enable-encoder=dvbsub --enable-encoder=dvdsub --enable-encoder=movtext --enable-encoder=ssa --enable-encoder=subrip --enable-encoder=text --enable-encoder=webvtt --enable-encoder=xsub --enable-encoder=pcm_f32be --enable-encoder=pcm_f32le --enable-encoder=pcm_f64be --enable-encoder=pcm_f64le --enable-encoder=pcm_s8 --enable-encoder=pcm_s8_planar --enable-encoder=pcm_s16be --enable-encoder=pcm_s16be_planar --enable-encoder=pcm_s16le --enable-encoder=pcm_s16le_planar --enable-encoder=pcm_s24be --enable-encoder=pcm_s24le --enable-encoder=pcm_s24le_planar --enable-encoder=pcm_s32be --enable-encoder=pcm_s32le --enable-encoder=pcm_s32le_planar --enable-encoder=pcm_u8 --enable-encoder=pcm_u16be --enable-encoder=pcm_u16le --enable-encoder=pcm_u24be --enable-encoder=pcm_u24le --enable-encoder=pcm_u32be --enable-encoder=pcm_u32le --enable-encoder=h264_vaapi --enable-encoder=hevc_vaapi --enable-encoder=h264_nvenc --enable-encoder=hevc_nvenc --enable-encoder=eac3_eae --enable-hwaccel=av1_vaapi --enable-hwaccel=av1_nvdec --prefix=/home/runner/_work/plex-conan/plex-conan/.conan/data/ffmpeg/2.0-1c9686755d-0/plex/main/build/d17660f7512a62e64743f73949dbd3a0155eeb35/transcoder-install --enable-libzvbi --enable-openssl --enable-libass --enable-libopus --enable-libvorbis --enable-libdav1d --extra-cflags='-m64 -O3 -fdata-sections -ffunction-sections -fno-omit-frame-pointer -g2 -gdwarf-4 -fcommon -flto=thin -fwhole-program-vtables -I/home/runner/_work/plex-conan/plex-conan/.conan/data/opus/1.2.1-38/plex/main/package/64edc78a49b81c2615dad7b22a9ac90cc029860a/include -I/home/runner/_work/plex-conan/plex-conan/.conan/data/libvorbis/1.3.5-42/plex/main/package/76eba14299c6c14bf4759b1da21aec07c9ca1a2f/include -I/home/runner/_work/plex-conan/plex-conan/.conan/data/dav1d/1.0.0-18/plex/main/package/4d954bcc6be6a68b775ef1b1bae9dd65e4e237ff/include -I/home/runner/_work/plex-conan/plex-conan/.conan/data/ffnvcodec/11.1.5.3-43d9170-0/plex/main/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include -I/home/runner/_work/plex-conan/plex-conan/.conan/data/openssl/3.1.1-2cf4e90-4/plex/main/package/121b5d655884b039b2c06c747f3d73ef7b698b66/include -I/home/runner/_work/plex-conan/plex-conan/.conan/data/x264/161-1086f45-33/plex/main/package/64edc78a49b81c2615dad7b22a9ac90cc029860a/include -I/home/runner/_work/plex-conan/plex-conan/.conan/data/zvbi/0.2.35-64/plex/main/package/7366a567f554439fb9e7a3415c9d1c2ea2b75360/include -I/home/runner/_work/plex-conan/plex-conan/.conan/data/libass/0.17.3-4/plex/main/package/d81dbed7e8ad560c9ec55240308ceb55b203927d/include -I/home/runner/_work/plex-conan/plex-conan/.conan/data/mp3lame/3.98.4-37/plex/main/package/64edc78a49b81c2615dad7b22a9ac90cc029860a/include -I/home/runner/_work/plex-conan/plex-conan/.conan/data/intel-media-driver/24.1.5-8/plex/main/package/692c8a3a5ee1dcef32efca7f6d273cefdb94118c/include -I/home/runner/_work/plex-conan/plex-conan/.conan/data/libogg/1.3.2-38/plex/main/package/64edc78a49b81c2615dad7b22a9ac90cc029860a/include -I/home/runner/_work/plex-conan/plex-conan/.conan/data/iconv/1.16-36/plex/main/package/da4999666f4b1709dd93ae40fffdb2c6f130b23f/include -I/home/runner/_work/plex-conan/plex-conan/.conan/data/fribidi/1.0.12-6/plex/main/package/464531ac2a3f2ab2167bd10d1214603bc8116983/include -I/home/runner/_work/plex-conan/plex-conan/.conan/data/harfbuzz/4.2.1-9/plex/main/package/53415d552ac96104f622ffa8d8530937a40b4271/include/harfbuzz -I/home/runner/_work/plex-conan/plex-conan/.conan/data/libva/2.21.0-7/plex/main/package/f0f4893209b867ce448a96e25ef4d6b158311557/include -I/home/runner/_work/plex-conan/plex-conan/.conan/data/intel-gmmlib/22.3.19-0/plex/main/package/d7d5d1f35ff92a8c39da6b47605055e839a42a9c/include -I/home/runner/_work/plex-conan/plex-conan/.conan/data/opencl-headers/v2024.05.08-8275634-0/plex/main/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include -I/home/runner/_work/plex-conan/plex-conan/.conan/data/fontconfig/2.14.0-9/plex/main/package/aacc2a7710dfa87ed80d4eea45b80c93243fe456/include -I/home/runner/_work/plex-conan/plex-conan/.conan/data/libdrm/2.4.120-4/plex/main/package/ba4ee9fcf280d38ea7457f18301aac09908b7976/include -I/home/runner/_work/plex-conan/plex-conan/.conan/data/libdrm/2.4.120-4/plex/main/package/ba4ee9fcf280d38ea7457f18301aac09908b7976/include/libdrm -I/home/runner/_work/plex-conan/plex-conan/.conan/data/libxml2/2.9.11-e1bcffea-17/plex/main/package/33406d37abb556848190dcd6097a9849aa894baf/include -I/home/runner/_work/plex-conan/plex-conan/.conan/data/libxml2/2.9.11-e1bcffea-17/plex/main/package/33406d37abb556848190dcd6097a9849aa894baf/include/libxml2 -I/home/runner/_work/plex-conan/plex-conan/.conan/data/freetype2/2.12.1-30/plex/main/package/82a00e1e4cc2e8878bb79ae9b5e2235fd8280e6a/include -I/home/runner/_work/plex-conan/plex-conan/.conan/data/expat/2.6.4-0/plex/main/package/64edc78a49b81c2615dad7b22a9ac90cc029860a/include -I/home/runner/_work/plex-conan/plex-conan/.conan/data/libuuid/1.0.3-32/plex/main/package/841d526523d3550ac4d52807df94cbbedce37e2c/include -I/home/runner/_work/plex-conan/plex-conan/.conan/data/libpciaccess/0.17-6/plex/main/package/7763a87432c78a82fd36373080b064286892cea3/include -I/home/runner/_work/plex-conan/plex-conan/.conan/data/bzip2/1.0.6-42/plex/main/package/618bb3c469051b52e1349cf1a297263df374d15a/include -I/home/runner/_work/plex-conan/plex-conan/.conan/data/libpng/1.6.37-45/plex/main/package/33406d37abb556848190dcd6097a9849aa894baf/include -I/home/runner/_work/plex-conan/plex-conan/.conan/data/zlib/1.2.11-36/plex/main/package/64edc78a49b81c2615dad7b22a9ac90cc029860a/include -DLIBXML_STATIC -DFRIBIDI_LIB_STATIC -DNDEBUG'
  libavutil      57. 24.102 / 57. 24.102
  libavcodec     59. 25.100 / 59. 25.100
  libavformat    59. 20.101 / 59. 20.101
  libavfilter     8. 29.100 /  8. 29.100
  libswscale      6.  6.100 /  6.  6.100
  libswresample   4.  6.100 /  4.  6.100
Input #0, mp3, from '/mnt/HD/HD_a2/media/multiple_id3_values.mp3':
  Metadata:
    title           : Infinite (Original Mix)
    artist          : B-Front
    artist          : Second Artist Example
    track           : 1
    album           : Infinite
    date            : 2017
    genre           : Hardstyle
    genre           : Test
    genre           : Example
    genre           : Hard Dance
    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: Audio: mp3, 44100 Hz, stereo, 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: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 600x600 [SAR 1:1 DAR 1:1], 90k tbr, 90k tbn (attached pic)
    Metadata:
      comment         : Cover (front)

But in plex server 1.41.6.9685, it scan .m4a artist tag name1; name2; name4 as only name4.
audio file: https://gofile.io/d/qP19zd


And plex scan .flac artist tag REMEDIOS; BoA; Bob Dylan as REMEDIOS;BoA;Bob Dylan, This makes it impossible to navigate from track to different artists in plexamp , and I confirm that all three artists exist in the plex server database.

flac file: https://gofile.io/d/QtEKCV


You can never navigate from a track artist to an album artist in Plex.
The two are very distinct in Plex.

The list of artists that you see in plex is consisting of only Album artists. i.e. artists which have a release (album, EP, Single etc) attributed to them.
Artists which only appear on a track (i.e. “track artists”) don’t appear in this list.

As I said above, I am navigating to the album artist via track multi-artist in plexamp, and all 3 artists in my example have separate display pages in my plex, if i change the track artist to REMEDIOS, BoA, Bob Dylan, it could navigate! My question is, why doesn’t REMEDIOS; BoA; Bob Dylan work?

The 3 example files you provide are different formats and use different metadata container types.

The FFMPEG patch is specific to id3v2 tags.

I might have a relatively quick solution to handle m4a files. I’d have to investigate a bit more for FLAC however.

I am filing an internal issue for the m4a fix and will look into the FLAC support at a later time.

Hi, I noticed that Plex is currently (1.41.8.9834) able to parse value album; soundtrack of RELEASETYPE in .flac .m4a , this was not possible in previous versions and it could only parse album;soundtrack (Classify the album under the Soundtrack category on the album artist page).

However, it is still not possible to parse the multi-artist field in ARTIST like name1; name2, as described in my previous post:

Will plex add read support for name1; name2 style artist tag for .m4a .flac? Because you should have a custom ffmpeg. The plex currently reads:
name1; name2 in .m4a as only name2
name1; name2 in .flac as name1;name2, which leads to plexamp cannot navigate as i said above.

Picard writes multiple artists just separated by semicolons ; , it’s really stupid and behind the times to manually change it to , every time, for batch processing, this is a disaster!

I have a suggestion for reference only:
For .flac: Replace the name1;name2 of ARTIST read by Plex with name1, name2(That is, replace ; with , ) and save them to the database so that Plexamp can navigate by artist.

For .m4a: Use , or other plexamp-approved delimiters to concatenate all ARTIST values and save them to the database, for exmple:

Metadata:
artist : name1
artist : name2

name1, name2

Hi, is there any progress on the issue of multi-artist tag parsing? Rather than attempting to reconstruct the database to achieve true ‘multi-artist’ support, which seems unattainable, would it be possible to make a small improvement at the field parsing level?

I have discovered that the official build of FFmpeg still has issues with parsing multiple same tags in M4A containers. It can only read the latest value of the same tag and does not merge values of the same tag, such as multiple ARTIST or RELEASETYPE fields.




I suspect that expecting FFmpeg to resolve this issue may not be feasible. I wonder if the third-party FFmpeg built by Plex has a ‘patch’ to address this issue, or if Plex is considering introducing a dedicated audio parsing library, such as TagLib.

I have a suggestion regarding the handling of multi-valued albumartist tag in FLAC file:
https://forums.plex.tv/t/extract-the-first-value-from-the-multi-valued-tag-of-the-album-artist-in-flac/928062

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.