#9812 closed defect (fixed)

LEAD_PERFORMER tag on Matroska chapter gets changed to PERFORMER

Reported by: wvc Owned by:
Priority: normal Component: avformat
Version: git-master Keywords: matroska metadata
Cc: wvc Blocked By:
Blocking: Reproduced by developer: yes
Analyzed by developer: yes

Description (last modified by wvc)

Summary of the bug:
When processing a Matroska file with a LEAD_PERFORMER tag on a chapter, FFmpeg changes the tag to PERFORMER.

How to reproduce:

$ mkvextract test.mkv tags
<?xml version="1.0"?>
<!-- <!DOCTYPE Tags SYSTEM "matroskatags.dtd"> -->
<Tags>
  <Tag>
    <Targets>
      <ChapterUID>1</ChapterUID>
    </Targets>
    <Simple>
      <Name>LEAD_PERFORMER</Name>
      <String>Bob</String>
    </Simple>
  </Tag>
  <Tag>
    <Targets />
    <Simple>
      <Name>ENCODER</Name>
      <String>Lavf59.16.100</String>
    </Simple>
  </Tag>
  <Tag>
    <Targets>
      <TrackUID>6303416409872754858</TrackUID>
    </Targets>
    <Simple>
      <Name>ENCODER</Name>
      <String>Lavc59.18.100 libx264</String>
    </Simple>
    <Simple>
      <Name>DURATION</Name>
      <String>00:00:01.000000000</String>
    </Simple>
  </Tag>
</Tags>

$ $ ffmpeg -i test.mkv -c copy test2.mkv
ffmpeg version N-107110-ge5f6707a7b Copyright (c) 2000-2022 the FFmpeg developers
  built with gcc 10 (Debian 10.2.1-6)
  configuration: 
  libavutil      57. 27.100 / 57. 27.100
  libavcodec     59. 33.100 / 59. 33.100
  libavformat    59. 25.100 / 59. 25.100
  libavdevice    59.  6.100 / 59.  6.100
  libavfilter     8. 40.100 /  8. 40.100
  libswscale      6.  6.100 /  6.  6.100
  libswresample   4.  6.100 /  4.  6.100
Input #0, matroska,webm, from 'test.mkv':
  Metadata:
    ENCODER         : Lavf59.16.100
  Duration: 00:00:01.00, start: 0.000000, bitrate: 68 kb/s
  Chapters:
    Chapter #0:0: start 0.000000, end 1.000000
      Metadata:
        performer       : Bob
  Stream #0:0: Video: h264 (High 4:4:4 Predictive), yuv444p(tv, progressive), 320x240 [SAR 1:1 DAR 4:3], 25 fps, 25 tbr, 1k tbn
    Metadata:
      ENCODER         : Lavc59.18.100 libx264
      DURATION        : 00:00:01.000000000
Output #0, matroska, to 'test2.mkv':
  Metadata:
    encoder         : Lavf59.25.100
  Chapters:
    Chapter #0:0: start 0.000000, end 1.000000
      Metadata:
        LEAD_PERFORMER  : Bob
  Stream #0:0: Video: h264 (High 4:4:4 Predictive) (H264 / 0x34363248), yuv444p(tv, progressive), 320x240 [SAR 1:1 DAR 4:3], q=2-31, 25 fps, 25 tbr, 1k tbn
    Metadata:
      ENCODER         : Lavc59.18.100 libx264
      DURATION        : 00:00:01.000000000
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
frame=   25 fps=0.0 q=-1.0 Lsize=       8kB time=00:00:00.88 bitrate=  77.5kbits/s speed=3.66e+03x    
video:7kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 11.583214%

$ $ mkvextract test2.mkv tags
<?xml version="1.0"?>
<!-- <!DOCTYPE Tags SYSTEM "matroskatags.dtd"> -->
<Tags>
  <Tag>
    <Targets>
      <ChapterUID>1</ChapterUID>
    </Targets>
    <Simple>
      <Name>PERFORMER</Name>
      <String>Bob</String>
    </Simple>
  </Tag>
  <Tag>
    <Targets />
    <Simple>
      <Name>ENCODER</Name>
      <String>Lavf59.25.100</String>
    </Simple>
  </Tag>
  <Tag>
    <Targets>
      <TrackUID>11395597827482505527</TrackUID>
    </Targets>
    <Simple>
      <Name>ENCODER</Name>
      <String>Lavc59.18.100 libx264</String>
    </Simple>
    <Simple>
      <Name>DURATION</Name>
      <String>00:00:01.000000000</String>
    </Simple>
  </Tag>
</Tags>

$ ffmpeg -v 9 -loglevel 99 -i test.mkv 
ffmpeg version N-107110-ge5f6707a7b Copyright (c) 2000-2022 the FFmpeg developers
  built with gcc 10 (Debian 10.2.1-6)
  configuration: 
  libavutil      57. 27.100 / 57. 27.100
  libavcodec     59. 33.100 / 59. 33.100
  libavformat    59. 25.100 / 59. 25.100
  libavdevice    59.  6.100 / 59.  6.100
  libavfilter     8. 40.100 /  8. 40.100
  libswscale      6.  6.100 /  6.  6.100
  libswresample   4.  6.100 /  4.  6.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 '-i' ... matched as input url with argument 'test.mkv'.
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 test.mkv.
Successfully parsed a group of options.
Opening an input file: test.mkv.
[NULL @ 0x560ab5fd3400] Opening 'test.mkv' for reading
[file @ 0x560ab5fd3c80] Setting default whitelist 'file,crypto,data'
Probing matroska,webm score:100 size:2048
Probing mp3 score:1 size:2048
[matroska,webm @ 0x560ab5fd3400] Format matroska,webm probed with size=2048 and score=100
st:0 removing common factor 1000000 from timebase
[matroska,webm @ 0x560ab5fd3400] Before avformat_find_stream_info() pos: 718 bytes read:8567 seeks:0 nb_streams:1
[h264 @ 0x560ab5fd60c0] nal_unit_type: 7(SPS), nal_ref_idc: 3
[h264 @ 0x560ab5fd60c0] nal_unit_type: 8(PPS), nal_ref_idc: 3
[h264 @ 0x560ab5fd60c0] nal_unit_type: 7(SPS), nal_ref_idc: 3
[h264 @ 0x560ab5fd60c0] nal_unit_type: 8(PPS), nal_ref_idc: 3
[h264 @ 0x560ab5fd60c0] nal_unit_type: 6(SEI), nal_ref_idc: 0
[h264 @ 0x560ab5fd60c0] nal_unit_type: 5(IDR), nal_ref_idc: 3
[h264 @ 0x560ab5fd60c0] Format yuv444p chosen by get_format().
[h264 @ 0x560ab5fd60c0] Reinit context to 320x240, pix_fmt: yuv444p
[h264 @ 0x560ab5fd60c0] no picture 
[matroska,webm @ 0x560ab5fd3400] All info found
[matroska,webm @ 0x560ab5fd3400] stream 0: start_time: 0 duration: NOPTS
[matroska,webm @ 0x560ab5fd3400] format: start_time: 0 duration: 1 (estimate from stream) bitrate=68 kb/s
[matroska,webm @ 0x560ab5fd3400] After avformat_find_stream_info() pos: 5118 bytes read:8567 seeks:0 frames:4
Input #0, matroska,webm, from 'test.mkv':
  Metadata:
    ENCODER         : Lavf59.16.100
  Duration: 00:00:01.00, start: 0.000000, bitrate: 68 kb/s
  Chapters:
    Chapter #0:0: start 0.000000, end 1.000000
      Metadata:
        performer       : Bob
  Stream #0:0, 4, 1/1000: Video: h264 (High 4:4:4 Predictive), 1 reference frame, yuv444p(tv, progressive, left), 320x240 [SAR 1:1 DAR 4:3], 0/1, 25 fps, 25 tbr, 1k tbn
    Metadata:
      ENCODER         : Lavc59.18.100 libx264
      DURATION        : 00:00:01.000000000
Successfully opened the file.
At least one output file must be specified
[AVIOContext @ 0x560ab5fdc040] Statistics: 8567 bytes read, 0 seeks

The test file was produced with ffmpeg -i metadata -f lavfi -i testsrc -t 1 test.mkv where metadata contains

;FFMETADATA1

[CHAPTER]
TIMEBASE=1/1000000000
START=0
END=1000000000
LEAD_PERFORMER=Bob

The official tag according to the Matroska specification appears to be LEAD_PERFORMER, but PERFORMER is also mentioned at https://matroska.org/technical/tagging.html.

Attachments (1)

test.mkv (8.4 KB ) - added by wvc 22 months ago.
Test input file with a LEAD_PERFORMER tag on a chapter

Download all attachments as: .zip

Change History (4)

by wvc, 22 months ago

Attachment: test.mkv added

Test input file with a LEAD_PERFORMER tag on a chapter

comment:1 by wvc, 22 months ago

Description: modified (diff)

comment:2 by mkver, 22 months ago

Analyzed by developer: set
Component: ffmpegavformat
Reproduced by developer: set
Status: newopen

Patch is available here. Will probably apply it tomorrow.

Thanks for the report.

comment:3 by mkver, 22 months ago

Resolution: fixed
Status: openclosed
Note: See TracTickets for help on using tickets.