[FFmpeg-trac] #9641(avformat:new): Matroska duplicate tags are only output once instead of repeated
FFmpeg
trac at avcodec.org
Fri Feb 11 19:57:51 EET 2022
#9641: Matroska duplicate tags are only output once instead of repeated
-------------------------------------+-------------------------------------
Reporter: Gary Moore | Type: defect
Status: new | Priority: normal
Component: avformat | Version:
Keywords: matroska | unspecified
metadata | Blocked By:
Blocking: | Reproduced by developer: 0
Analyzed by developer: 0 |
-------------------------------------+-------------------------------------
When using ffprobe from the commandline, or calling into ffmpeg using
{{{#!div style="font-size: 80%"
{{{#!c++
while ((tag=av_dict_get(m_fctx->chapters[i]->metadata, "", tag,
AV_DICT_IGNORE_SUFFIX)))
}}}
}}}
if there are duplicate tags, only the last tag and value is returned. The
Matroska tag spec (https://www.matroska.org/technical/tagging.html) states
that if a tag has multiple values, the tag should be repeated with one
value per tag.
However, ffmpeg only returns the last tag and value. This prevents
extending mka tag support in Kodi (which uses ffmpeg for tag reading) as
there can be multiple composers/lyricists etc for individual tracks.
This bug is present in v4.4 (current version used by Kodi) and v5.0 using
a static build of github master branch from
https://johnvansickle.com/ffmpeg/ dated 20220108
{{{#!div style="font-size: 80%"
ffprobe output (commandline ffprobe -v 9 -loglevel 99 -i
../music/5.1SurroundSoundTestFilesVariousFormatsAACAC3MP4DTSWAV/mka/Pink\
Floyd\ Live\ at\ Knebworth\ 1990.mka)
{{{#!bash
./ffprobe -v 9 -loglevel 99 -i
../music/5.1SurroundSoundTestFilesVariousFormatsAACAC3MP4DTSWAV/mka/Pink\
Floyd\ Live\ at\ Knebworth\ 1990.mka
ffprobe version N-60236-gffb000fff8-static
https://johnvansickle.com/ffmpeg/ Copyright (c) 2007-2022 the FFmpeg
developers
built with gcc 8 (Debian 8.3.0-6)
configuration: --enable-gpl --enable-version3 --enable-static --disable-
debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio
--cc=gcc --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gmp
--enable-libgme --enable-gray --enable-libaom --enable-libfribidi
--enable-libass --enable-libvmaf --enable-libfreetype --enable-libmp3lame
--enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg
--enable-librubberband --enable-libsoxr --enable-libspeex --enable-libsrt
--enable-libvorbis --enable-libopus --enable-libtheora --enable-libvidstab
--enable-libvo-amrwbenc --enable-libvpx --enable-libwebp --enable-libx264
--enable-libx265 --enable-libxml2 --enable-libdav1d --enable-libxvid
--enable-libzvbi --enable-libzimg
libavutil 57. 18.100 / 57. 18.100
libavcodec 59. 20.100 / 59. 20.100
libavformat 59. 17.100 / 59. 17.100
libavdevice 59. 5.100 / 59. 5.100
libavfilter 8. 25.100 / 8. 25.100
libswscale 6. 5.100 / 6. 5.100
libswresample 4. 4.100 / 4. 4.100
libpostproc 56. 4.100 / 56. 4.100
[NULL @ 0x5a771c0] Opening
'../music/5.1SurroundSoundTestFilesVariousFormatsAACAC3MP4DTSWAV/mka/Pink
Floyd Live at Knebworth 1990.mka' for reading
[file @ 0x5a77a80] Setting default whitelist 'file,crypto,data'
Probing matroska,webm score:100 size:2048
[matroska,webm @ 0x5a771c0] Format matroska,webm probed with size=2048 and
score=100
[matroska,webm @ 0x5a771c0] Unknown entry 0x447B at pos. 2013792645
[matroska,webm @ 0x5a771c0] Unknown entry 0x447B at pos. 2013792741
[matroska,webm @ 0x5a771c0] Unknown entry 0x447B at pos. 2013793267
[matroska,webm @ 0x5a771c0] Unknown entry 0x447B at pos. 2013793369
[matroska,webm @ 0x5a771c0] Unknown entry 0x447B at pos. 2013793535
[matroska,webm @ 0x5a771c0] Unknown entry 0x447B at pos. 2013794075
[matroska,webm @ 0x5a771c0] Unknown entry 0x447B at pos. 2013794240
[matroska,webm @ 0x5a771c0] Unknown entry 0x447B at pos. 2013794483
[matroska,webm @ 0x5a771c0] Unknown entry 0x447B at pos. 2013794666
[matroska,webm @ 0x5a771c0] Unknown entry 0x447B at pos. 2013794841
[matroska,webm @ 0x5a771c0] Unknown entry 0x447B at pos. 2013794962
st:0 removing common factor 32 from timebase
[matroska,webm @ 0x5a771c0] Before avformat_find_stream_info() pos: 5977
bytes read:35491 seeks:2 nb_streams:1
[matroska,webm @ 0x5a771c0] All info found
[matroska,webm @ 0x5a771c0] stream 0: start_time: 0 duration: NOPTS
[matroska,webm @ 0x5a771c0] format: start_time: 0 duration: 3426.7
(estimate from stream) bitrate=4701 kb/s
[matroska,webm @ 0x5a771c0] After avformat_find_stream_info() pos: 32664
bytes read:68259 seeks:2 frames:1
Input #0, matroska,webm, from
'../music/5.1SurroundSoundTestFilesVariousFormatsAACAC3MP4DTSWAV/mka/Pink
Floyd Live at Knebworth 1990.mka':
Metadata:
creation_time : 2022-02-09T11:24:44.000000Z
encoder : libebml v1.3.10 + libmatroska v1.5.2
TITLE : Live at Knebworth 1990
ALBUMARTISTSORT : Pink Floyd
ARTIST : Pink Floyd
ARTISTSORT : Pink Floyd
MUSICBRAINZ_ALBUMARTIST: Pink Floyd
MUSICBRAINZ_ALBUMARTISTID: 83d91898-7763-47d7-b03b-b92132375c47
MUSICBRAINZ_ALBUMID: 4f6f7e13-1d87-430e-b2c7-86acf58fe15f
MUSICBRAINZ_ARTISTID: 83d91898-7763-47d7-b03b-b92132375c47
MUSICBRAINZ_RELEASEGROUPID: 9c4299b6-7e4a-4879-9fcf-5b15ca10a233
PUBLISHER : Parlophone
DATE_RECORDED : 2021
Duration: 00:57:06.70, start: 0.000000, bitrate: 4701 kb/s
Chapters:
Chapter #0:0: start 0.000000, end 663.663000
Metadata:
MUSICBRAINZ_TRACKID: 84e3cf9a-f1f2-49ff-8d8a-8596d57a0a7a
COMPOSER : David Gilmour;Roger Waters;Richard Wright
INSTRUMENTS : David Gilmour,Guitar,Nick Mason,Drums,Guy
Pratt,Bass Guitar,Clare Torry,Backing Vocals,Sam Brown,BackingVocals,Candy
Dulfer,Saxaphone,Tim Renwick,Guitar,Richard Wright,Backing vocals,Richard
Wright,keyboards
LYRICIST : Roger Waters
TITLE : Shine On You Crazy Diamond, Parts 1–5
track : 1/7
Chapter #0:1: start 663.663000, end 967.633333
Metadata:
MUSICBRAINZ_TRACKID: 3cbc4c9c-bac2-47c3-a4fb-4515efe726c2
COMPOSER : Richard Wright
TITLE : The Great Gig in the Sky
track : 2/7
Chapter #0:2: start 967.633333, end 1270.060458
Metadata:
MUSICBRAINZ_TRACKID: c2e10557-3208-4965-88c6-40c534cc0cfb
TITLE : Wish You Were Here
track : 3/7
Chapter #0:3: start 1270.060458, end 1840.839000
Metadata:
MUSICBRAINZ_TRACKID: b5b91cd2-b0f1-4569-99b5-8ddce4e7c441
TITLE : Sorrow
track : 4/7
Chapter #0:4: start 1840.839000, end 2453.159042
Metadata:
MUSICBRAINZ_TRACKID: 46725dce-1e11-4f29-a3c1-ce62168204c4
TITLE : Money
track : 5/7
Chapter #0:5: start 2453.159042, end 2947.569625
Metadata:
MUSICBRAINZ_TRACKID: 366f18f0-c8fb-4a05-89ff-0ce83f1e289f
TITLE : Comfortably Numb
track : 6/7
Chapter #0:6: start 2947.569625, end 3426.690000
Metadata:
MUSICBRAINZ_TRACKID: 28636bbd-b8ec-4cb0-9c3c-4444a4df7eb1
TITLE : Run Like Hell
track : 7/7
Stream #0:0(eng), 1, 651/31250000: Audio: dts (DTS-HD MA), 48000 Hz,
5.1(side), s32p (24 bit)
Metadata:
title : Surround 5.1
BPS-eng : 4699476
DURATION-eng : 00:57:06.699323040
NUMBER_OF_BYTES-eng: 2012961516
NUMBER_OF_FRAMES-eng: 321253
_STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
_STATISTICS_WRITING_APP-eng: mkvmerge v45.0.0 ('Heaven in Pennies')
64-bit
_STATISTICS_WRITING_DATE_UTC-eng: 2022-02-09 11:24:44
[AVIOContext @ 0x5a7ff00] Statistics: 68259 bytes read, 2 seeks
}}}
}}}
Note that Chapter #0:1 has only one composer tag
``Chapter #0:1: start 663.663000, end 967.633333
Metadata:
MUSICBRAINZ_TRACKID: 3cbc4c9c-bac2-47c3-a4fb-4515efe726c2
COMPOSER : Richard Wright
TITLE : The Great Gig in the Sky
track : 2/7``
Output from `mkvextract tags Pink\ Floyd\ Live\ at\ Knebworth\ 1990.mka >
pftags.xml`
{{{#!div style="font-size: 80%"
{{{#!xml
<?xml version="1.0"?>
<!-- <!DOCTYPE Tags SYSTEM "matroskatags.dtd"> -->
<Tags>
<Tag>
<Targets>
<TargetTypeValue>50</TargetTypeValue>
</Targets>
<Simple>
<Name>TITLE</Name>
<String>Live at Knebworth 1990</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
<TagLanguageIETF>und</TagLanguageIETF>
</Simple>
<Simple>
<Name>ARTIST</Name>
<String>Pink Floyd</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
</Simple>
</Tag>
<Tag>
<Targets>
<TargetTypeValue>30</TargetTypeValue>
</Targets>
<Simple>
<Name>ALBUMARTISTSORT</Name>
<String>Pink Floyd</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
<TagLanguageIETF>und</TagLanguageIETF>
</Simple>
<Simple>
<Name>ARTIST</Name>
<String>Pink Floyd</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
</Simple>
<Simple>
<Name>ARTISTSORT</Name>
<String>Pink Floyd</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
</Simple>
<Simple>
<Name>MUSICBRAINZ_ALBUMARTIST</Name>
<String>Pink Floyd</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
</Simple>
<Simple>
<Name>MUSICBRAINZ_ALBUMARTISTID</Name>
<String>83d91898-7763-47d7-b03b-b92132375c47</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
</Simple>
<Simple>
<Name>MUSICBRAINZ_ALBUMID</Name>
<String>4f6f7e13-1d87-430e-b2c7-86acf58fe15f</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
</Simple>
<Simple>
<Name>MUSICBRAINZ_ARTISTID</Name>
<String>83d91898-7763-47d7-b03b-b92132375c47</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
</Simple>
<Simple>
<Name>MUSICBRAINZ_RELEASEGROUPID</Name>
<String>9c4299b6-7e4a-4879-9fcf-5b15ca10a233</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
</Simple>
<Simple>
<Name>PUBLISHER</Name>
<String>Parlophone</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
</Simple>
</Tag>
<Tag>
<Targets>
<TargetTypeValue>50</TargetTypeValue>
</Targets>
<Simple>
<Name>DATE_RECORDED</Name>
<String>2021</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
<TagLanguageIETF>und</TagLanguageIETF>
</Simple>
</Tag>
<Tag>
<Targets>
<ChapterUID>1518495949379077925</ChapterUID>
<TargetTypeValue>30</TargetTypeValue>
</Targets>
<Simple>
<Name>MUSICBRAINZ_TRACKID</Name>
<String>28636bbd-b8ec-4cb0-9c3c-4444a4df7eb1</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
<TagLanguageIETF>und</TagLanguageIETF>
</Simple>
<Simple>
<Name>TITLE</Name>
<String>Run Like Hell</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
</Simple>
<Simple>
<Name>PART_NUMBER</Name>
<String>7/7</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
</Simple>
</Tag>
<Tag>
<Targets>
<ChapterUID>3613098625400000886</ChapterUID>
<TargetTypeValue>30</TargetTypeValue>
</Targets>
<Simple>
<Name>COMPOSER</Name>
<String>David Gilmour;Roger Waters;Richard Wright</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
<TagLanguageIETF>und</TagLanguageIETF>
</Simple>
<Simple>
<Name>INSTRUMENTS</Name>
<String>David Gilmour,Guitar,Nick Mason,Drums,Guy Pratt,Bass
Guitar,Clare Torry,Backing Vocals,Sam Brown,BackingVocals,Candy
Dulfer,Saxaphone,Tim Renwick,Guitar,Richard Wright,Backing vocals,Richard
Wright,keyboards</String>
</Simple>
<Simple>
<Name>LYRICIST</Name>
<String>Roger Waters</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
</Simple>
<Simple>
<Name>MUSICBRAINZ_TRACKID</Name>
<String>84e3cf9a-f1f2-49ff-8d8a-8596d57a0a7a</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
</Simple>
<Simple>
<Name>TITLE</Name>
<String>Shine On You Crazy Diamond, Parts 1–5</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
</Simple>
<Simple>
<Name>PART_NUMBER</Name>
<String>1/7</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
</Simple>
</Tag>
<Tag>
<Targets>
<ChapterUID>11822505076461640796</ChapterUID>
<TargetTypeValue>30</TargetTypeValue>
</Targets>
<Simple>
<Name>MUSICBRAINZ_TRACKID</Name>
<String>b5b91cd2-b0f1-4569-99b5-8ddce4e7c441</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
<TagLanguageIETF>und</TagLanguageIETF>
</Simple>
<Simple>
<Name>TITLE</Name>
<String>Sorrow</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
</Simple>
<Simple>
<Name>PART_NUMBER</Name>
<String>4/7</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
</Simple>
</Tag>
<Tag>
<Targets>
<ChapterUID>12948420648829714117</ChapterUID>
<TargetTypeValue>30</TargetTypeValue>
</Targets>
<Simple>
<Name>MUSICBRAINZ_TRACKID</Name>
<String>46725dce-1e11-4f29-a3c1-ce62168204c4</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
<TagLanguageIETF>und</TagLanguageIETF>
</Simple>
<Simple>
<Name>TITLE</Name>
<String>Money</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
</Simple>
<Simple>
<Name>PART_NUMBER</Name>
<String>5/7</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
</Simple>
</Tag>
<Tag>
<Targets>
<ChapterUID>14931913620754867571</ChapterUID>
<TargetTypeValue>30</TargetTypeValue>
</Targets>
<Simple>
<Name>COMPOSER</Name>
<String>Clare Torry</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
</Simple>
<Simple>
<Name>COMPOSER</Name>
<String>Richard Wright</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
</Simple>
<Simple>
<Name>MUSICBRAINZ_TRACKID</Name>
<String>3cbc4c9c-bac2-47c3-a4fb-4515efe726c2</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
<TagLanguageIETF>und</TagLanguageIETF>
</Simple>
<Simple>
<Name>TITLE</Name>
<String>The Great Gig in the Sky</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
</Simple>
<Simple>
<Name>PART_NUMBER</Name>
<String>2/7</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
</Simple>
</Tag>
<Tag>
<Targets>
<ChapterUID>16908591664885573413</ChapterUID>
<TargetTypeValue>30</TargetTypeValue>
</Targets>
<Simple>
<Name>MUSICBRAINZ_TRACKID</Name>
<String>366f18f0-c8fb-4a05-89ff-0ce83f1e289f</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
<TagLanguageIETF>und</TagLanguageIETF>
</Simple>
<Simple>
<Name>TITLE</Name>
<String>Comfortably Numb</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
</Simple>
<Simple>
<Name>PART_NUMBER</Name>
<String>6/7</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
</Simple>
</Tag>
<Tag>
<Targets>
<ChapterUID>17396753124889256807</ChapterUID>
<TargetTypeValue>30</TargetTypeValue>
</Targets>
<Simple>
<Name>MUSICBRAINZ_TRACKID</Name>
<String>c2e10557-3208-4965-88c6-40c534cc0cfb</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
<TagLanguageIETF>und</TagLanguageIETF>
</Simple>
<Simple>
<Name>TITLE</Name>
<String>Wish You Were Here</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
</Simple>
<Simple>
<Name>PART_NUMBER</Name>
<String>3/7</String>
<TagLanguage>und</TagLanguage>
<DefaultLanguage>1</DefaultLanguage>
</Simple>
</Tag>
<Tag>
<Targets>
<TrackUID>3</TrackUID>
<TargetTypeValue>50</TargetTypeValue>
</Targets>
<Simple>
<Name>BPS</Name>
<String>4699476</String>
<TagLanguage>eng</TagLanguage>
<TagLanguageIETF>en</TagLanguageIETF>
</Simple>
<Simple>
<Name>DURATION</Name>
<String>00:57:06.699323040</String>
<TagLanguage>eng</TagLanguage>
</Simple>
<Simple>
<Name>NUMBER_OF_BYTES</Name>
<String>2012961516</String>
<TagLanguage>eng</TagLanguage>
</Simple>
<Simple>
<Name>NUMBER_OF_FRAMES</Name>
<String>321253</String>
<TagLanguage>eng</TagLanguage>
</Simple>
<Simple>
<Name>_STATISTICS_TAGS</Name>
<String>BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES</String>
<TagLanguage>eng</TagLanguage>
</Simple>
<Simple>
<Name>_STATISTICS_WRITING_APP</Name>
<String>mkvmerge v45.0.0 ('Heaven in Pennies') 64-bit</String>
<TagLanguage>eng</TagLanguage>
</Simple>
<Simple>
<Name>_STATISTICS_WRITING_DATE_UTC</Name>
<String>2022-02-09 11:24:44</String>
<TagLanguage>eng</TagLanguage>
</Simple>
</Tag>
</Tags>
}}}
}}}
The above shows two composer tags with different values, whereas
ffprobe/avformat only shows/returns the last tag and value.
If necessary I can supply the original file or I can tag a dummy mka/mkv
file with the same tags for testing purposes.
--
Ticket URL: <https://trac.ffmpeg.org/ticket/9641>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list