PBCore / EBUCore / MPEG-7 MediaInfo Output Differences (Unlcarity)

38 views
Skip to first unread message

Stefan

unread,
Jan 15, 2023, 8:07:50 PM1/15/23
to PBCore Talk
Hi everyone!

Happy new year! 😄

I am not sure if that’s the right place for my question. If not, I’m sorry and please ignore/delete this entry …

I am currently revising the archiving and distribution strategy of a larger catalog of hi-res movie files.

I am investigating how existing metadata standards can be used to create consistency in the collection, and how suitable the standards are for internal as well as external use.

Especially for the internal use, the technical metadata of the files is very crucial.

When reading out technical metadata via MediaInfo, both in PBCore and EBUCore I noticed differences.

Unfortunately, since my knowledge of metadata standards is limited, I hope someone can assist me with the interpretation of the output.


I tested a UHD HDR video file.


EBUCore Output:

<?xml version="1.0" encoding="UTF-8"?>

<!-- Generated at 2023-01-15T23:12:22Z by MediaInfoLib - v22.12 -->

<ebucore:ebuCoreMain xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:ebucore="urn:ebu:metadata-schema:ebucore" xmlns:xalan="http://xml.apache.org/xalan" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:ebu:metadata-schema:ebucore https://www.ebu.ch/metadata/schemas/EBUCore/20171009/ebucore.xsd" version="1.8" writingLibraryName="MediaInfoLib" writingLibraryVersion="22.12" dateLastModified="2023-01-15" timeLastModified="23:12:22Z">

    <ebucore:coreMetadata>

        <ebucore:format>

            <ebucore:videoFormat videoFormatName="ProRes" videoFormatVersionId="1">

                <ebucore:width unit="pixel">3840</ebucore:width>

                <ebucore:height unit="pixel">2160</ebucore:height>

                <ebucore:frameRate factorNumerator="1000" factorDenominator="1001">24</ebucore:frameRate>

                <ebucore:aspectRatio typeLabel="display">

                    <ebucore:factorNumerator>16</ebucore:factorNumerator>

                    <ebucore:factorDenominator>9</ebucore:factorDenominator>

                </ebucore:aspectRatio>

                <ebucore:videoEncoding typeLabel="4444" />

                <ebucore:codec>

                    <ebucore:codecIdentifier>

                        <dc:identifier>ap4h</dc:identifier>

                    </ebucore:codecIdentifier>

                </ebucore:codec>

                <ebucore:bitRate>769082388</ebucore:bitRate>

                <ebucore:bitRateMode>variable</ebucore:bitRateMode>

                <ebucore:scanningFormat>progressive</ebucore:scanningFormat>

                <ebucore:videoTrack trackId="1" />

                <ebucore:technicalAttributeString typeLabel="ColorSpace">YUVA</ebucore:technicalAttributeString>

                <ebucore:technicalAttributeString typeLabel="ChromaSubsampling">4:4:4</ebucore:technicalAttributeString>

                <ebucore:technicalAttributeString typeLabel="colour_primaries">BT.2020</ebucore:technicalAttributeString>

                <ebucore:technicalAttributeString typeLabel="transfer_characteristics">PQ</ebucore:technicalAttributeString>

                <ebucore:technicalAttributeString typeLabel="matrix_coefficients">BT.2020 non-constant</ebucore:technicalAttributeString>

                <ebucore:technicalAttributeString typeLabel="WritingLibrary">Apple</ebucore:technicalAttributeString>

                <ebucore:technicalAttributeInteger typeLabel="StreamSize" unit="byte">280675296</ebucore:technicalAttributeInteger>

            </ebucore:videoFormat>

            <ebucore:audioFormat audioFormatName="PCM">

                <ebucore:audioEncoding typeLabel="PCM" typeLink="http://www.ebu.ch/metadata/cs/ebu_AudioCompressionCodeCS.xml#11" />

                <ebucore:codec>

                    <ebucore:codecIdentifier>

                        <dc:identifier>in24</dc:identifier>

                    </ebucore:codecIdentifier>

                </ebucore:codec>

                <ebucore:samplingRate>48000</ebucore:samplingRate>

                <ebucore:sampleSize>24</ebucore:sampleSize>

                <ebucore:bitRate>1152000</ebucore:bitRate>

                <ebucore:bitRateMode>constant</ebucore:bitRateMode>

                <ebucore:audioTrack trackId="2" trackLanguage="en" />

                <ebucore:channels>1</ebucore:channels>

                <ebucore:technicalAttributeString typeLabel="ChannelLayout">M</ebucore:technicalAttributeString>

                <ebucore:technicalAttributeString typeLabel="Endianness">Little</ebucore:technicalAttributeString>

                <ebucore:technicalAttributeInteger typeLabel="StreamSize" unit="byte">420420</ebucore:technicalAttributeInteger>

            </ebucore:audioFormat>

            <ebucore:containerFormat containerFormatName="MPEG-4">

                <ebucore:containerEncoding formatLabel="MPEG-4" />

                <ebucore:codec>

                    <ebucore:codecIdentifier>

                        <dc:identifier>qt  </dc:identifier>

                    </ebucore:codecIdentifier>

                </ebucore:codec>

                <ebucore:technicalAttributeString typeLabel="FormatProfile">QuickTime</ebucore:technicalAttributeString>

                <ebucore:technicalAttributeString typeLabel="WritingLibrary">Apple QuickTime</ebucore:technicalAttributeString>

            </ebucore:containerFormat>

            <ebucore:timecodeFormat timecodeFormatName="QuickTime TC">

                <ebucore:timecodeStart>

                    <ebucore:timecode>00:00:00:00</ebucore:timecode>

                </ebucore:timecodeStart>

                <ebucore:timecodeTrack trackId="3" />

                <ebucore:technicalAttributeBoolean typeLabel="Stripped">true</ebucore:technicalAttributeBoolean>

            </ebucore:timecodeFormat>

            <ebucore:duration>

                <ebucore:normalPlayTime>PT2.920S</ebucore:normalPlayTime>

            </ebucore:duration>

            <ebucore:fileSize>282355218</ebucore:fileSize>

            <ebucore:fileName>metatest.mov</ebucore:fileName>

            <ebucore:locator>/Users/User/Documents/Test/metatest.mov</ebucore:locator>

            <ebucore:technicalAttributeInteger typeLabel="OverallBitRate" unit="bps">773575940</ebucore:technicalAttributeInteger>

            <ebucore:dateCreated startDate="2022-12-08" startTime="13:59:04Z" />

            <ebucore:dateModified startDate="2022-12-08" startTime="13:59:18Z" />

        </ebucore:format>

    </ebucore:coreMetadata>

</ebucore:ebuCoreMain>


PBCore Output:

<?xml version="1.0" encoding="UTF-8"?>

<!-- Generated at 2023-01-15T23:12:53Z by MediaInfoLib - v22.12 -->

<pbcoreInstantiationDocument xsi:schemaLocation="http://www.pbcore.org/PBCore/PBCoreNamespace.html https://raw.githubusercontent.com/WGBH/PBCore_2.1/master/pbcore-2.1.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.pbcore.org/PBCore/PBCoreNamespace.html">

    <instantiationIdentifier source="File Name">metatest.mov</instantiationIdentifier>

    <instantiationDate dateType="file modification">2022-12-08T16:03:16Z</instantiationDate>

    <instantiationDate dateType="encoded">2022-12-08T13:59:04Z</instantiationDate>

    <instantiationDate dateType="tagged">2022-12-08T13:59:18Z</instantiationDate>

    <instantiationDigital>video/mp4</instantiationDigital>

    <instantiationStandard profile="QuickTime">MPEG-4</instantiationStandard>

    <instantiationLocation>/Users/User/Documents/Test/metatest.mov</instantiationLocation>

    <instantiationMediaType>Moving Image</instantiationMediaType>

    <instantiationFileSize unitsOfMeasure="byte">282355218</instantiationFileSize>

    <instantiationDuration>00:00:02:22</instantiationDuration>

    <instantiationDataRate unitsOfMeasure="bit/second" annotation="VBR">773575940</instantiationDataRate>

    <instantiationTracks>2</instantiationTracks>

    <instantiationChannelConfiguration>Track 2: 1 channel (M), Track 2: 1 channel (M)</instantiationChannelConfiguration>

    <instantiationEssenceTrack>

        <essenceTrackType>Video</essenceTrackType>

        <essenceTrackIdentifier source="ID">1</essenceTrackIdentifier>

        <essenceTrackIdentifier source="StreamKindID (MediaInfo)">0</essenceTrackIdentifier>

        <essenceTrackIdentifier source="StreamOrder (MediaInfo)">0</essenceTrackIdentifier>

        <essenceTrackEncoding source="codecid" ref="ap4h" version="Version 1" annotation="profile:4444">ProRes</essenceTrackEncoding>

        <essenceTrackDataRate unitsOfMeasure="bit/second" annotation="VBR">769082388</essenceTrackDataRate>

        <essenceTrackFrameRate annotation="rational_frame_rate:24000/1001 interlacement:Progressive">23.976</essenceTrackFrameRate>

        <essenceTrackFrameSize>3840x2160</essenceTrackFrameSize>

        <essenceTrackAspectRatio>1.778</essenceTrackAspectRatio>

        <essenceTrackTimeStart source="Container">00:00:00:00</essenceTrackTimeStart>

        <essenceTrackDuration>00:00:02:22</essenceTrackDuration>

        <essenceTrackLanguage>eng</essenceTrackLanguage>

        <essenceTrackAnnotation annotationType="HDR_Format">SMPTE ST 2086</essenceTrackAnnotation>

        <essenceTrackAnnotation annotationType="HDR_Format_Commercial">HDR10</essenceTrackAnnotation>

        <essenceTrackAnnotation annotationType="HDR_Format_Compatibility">HDR10</essenceTrackAnnotation>

        <essenceTrackAnnotation annotationType="Rotation">0.000</essenceTrackAnnotation>

        <essenceTrackAnnotation annotationType="FrameCount">70</essenceTrackAnnotation>

        <essenceTrackAnnotation annotationType="ColorSpace">YUVA</essenceTrackAnnotation>

        <essenceTrackAnnotation annotationType="ChromaSubsampling">4:4:4</essenceTrackAnnotation>

        <essenceTrackAnnotation annotationType="StreamSize">280675296</essenceTrackAnnotation>

        <essenceTrackAnnotation annotationType="colour_description_present">Yes</essenceTrackAnnotation>

        <essenceTrackAnnotation annotationType="colour_description_present_Source">Container / Stream</essenceTrackAnnotation>

        <essenceTrackAnnotation annotationType="colour_primaries">BT.2020</essenceTrackAnnotation>

        <essenceTrackAnnotation annotationType="colour_primaries_Source">Container / Stream</essenceTrackAnnotation>

        <essenceTrackAnnotation annotationType="transfer_characteristics">PQ</essenceTrackAnnotation>

        <essenceTrackAnnotation annotationType="transfer_characteristics_Source">Container / Stream</essenceTrackAnnotation>

        <essenceTrackAnnotation annotationType="matrix_coefficients">BT.2020 non-constant</essenceTrackAnnotation>

        <essenceTrackAnnotation annotationType="matrix_coefficients_Source">Container / Stream</essenceTrackAnnotation>

        <essenceTrackAnnotation annotationType="MasteringDisplay_ColorPrimaries">Display P3</essenceTrackAnnotation>

        <essenceTrackAnnotation annotationType="MasteringDisplay_ColorPrimaries_Source">Container</essenceTrackAnnotation>

        <essenceTrackAnnotation annotationType="MasteringDisplay_Luminance">min: 0.0050 cd/m2, max: 1000 cd/m2</essenceTrackAnnotation>

        <essenceTrackAnnotation annotationType="MasteringDisplay_Luminance_Source">Container</essenceTrackAnnotation>

        <essenceTrackAnnotation annotationType="MaxCLL">721 cd/m2</essenceTrackAnnotation>

        <essenceTrackAnnotation annotationType="MaxCLL_Source">Container</essenceTrackAnnotation>

        <essenceTrackAnnotation annotationType="MaxFALL">421 cd/m2</essenceTrackAnnotation>

        <essenceTrackAnnotation annotationType="MaxFALL_Source">Container</essenceTrackAnnotation>

    </instantiationEssenceTrack>

    <instantiationEssenceTrack>

        <essenceTrackType>Audio</essenceTrackType>

        <essenceTrackIdentifier source="ID">2</essenceTrackIdentifier>

        <essenceTrackIdentifier source="StreamKindID (MediaInfo)">0</essenceTrackIdentifier>

        <essenceTrackIdentifier source="StreamOrder (MediaInfo)">1</essenceTrackIdentifier>

        <essenceTrackEncoding source="codecid" ref="in24" annotation="endianness:Little signedness:Signed">PCM</essenceTrackEncoding>

        <essenceTrackDataRate unitsOfMeasure="bit/second" annotation="CBR">1152000</essenceTrackDataRate>

        <essenceTrackSamplingRate unitsOfMeasure="Hz">48000</essenceTrackSamplingRate>

        <essenceTrackBitDepth>24</essenceTrackBitDepth>

        <essenceTrackTimeStart source="Container">00:00:00.000</essenceTrackTimeStart>

        <essenceTrackDuration>00:00:02.920</essenceTrackDuration>

        <essenceTrackLanguage>eng</essenceTrackLanguage>

        <essenceTrackAnnotation annotationType="StreamSize">420420</essenceTrackAnnotation>

    </instantiationEssenceTrack>

    <instantiationAnnotation annotationType="Other_Codec_List">QuickTime TC</instantiationAnnotation>

    <instantiationAnnotation annotationType="FrameCount">70</instantiationAnnotation>

    <instantiationAnnotation annotationType="Encoded_Library">Apple QuickTime</instantiationAnnotation>

    <instantiationAnnotation annotationType="TIM">00:00:00:00</instantiationAnnotation>

    <instantiationAnnotation annotationType="TSC">24000</instantiationAnnotation>

    <instantiationAnnotation annotationType="TSZ">1001</instantiationAnnotation>

</pbcoreInstantiationDocument>


I noticed, that in the EBUCore dataset e.g. some important HDR information is missing. Also, something, which is important for my use case, a frame exactly Timecode is not provided.

In contrast, all metadata from Mediainfo is mapped to PBCore – which is great.

If I understand it correctly, for some information, there is actually no special metadata field defined in PBCore. To map that information from MediaInfo into PBCore anyway, the element essenceTrackAnnotation with the attribute annotationType is used.

As a very simplistic conclusion, I would rather choose the PBCore Standard for my use case. Since it seems that here truly all my technical metadata can be adopted.


For fun, I also generated an MPEG-7 view. Even though I actually know that this standard is less suitable for my use case. And as you can see, even more important information is not transmitted in the MPEG-7 Standard.

<?xml version="1.0" encoding="UTF-8"?>

<!-- Generated at 2023-01-15T23:15:27Z by MediaInfoLib - v22.12 -->

<mpeg7:Mpeg7 xmlns="urn:mpeg:mpeg7:schema:2004" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mpeg7="urn:mpeg:mpeg7:schema:2004" xsi:schemaLocation="urn:mpeg:mpeg7:schema:2004 http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-7_schema_files/mpeg7-v2.xsd">

    <mpeg7:DescriptionMetadata>

        <mpeg7:PrivateIdentifier>metatest.mov</mpeg7:PrivateIdentifier>

        <mpeg7:CreationTime>2023-01-15T23:15:27+00:00</mpeg7:CreationTime>

        <mpeg7:Instrument>

            <mpeg7:Tool>

                <mpeg7:Name>MediaInfoLib - v22.12</mpeg7:Name>

            </mpeg7:Tool>

        </mpeg7:Instrument>

    </mpeg7:DescriptionMetadata>

    <mpeg7:Description xsi:type="ContentEntityType">

        <mpeg7:MultimediaContent xsi:type="AudioVisualType">

            <mpeg7:AudioVisual>

                <mpeg7:MediaInformation>

                    <mpeg7:MediaProfile>

                        <mpeg7:MediaFormat>

                            <mpeg7:Content href="urn:mpeg:mpeg7:cs:ContentCS:2001:2">

                                <mpeg7:Name xml:lang="en">Audiovisual</mpeg7:Name>

                            </mpeg7:Content>

                            <mpeg7:FileFormat href="urn:mpeg:mpeg7:cs:FileFormatCS:2001:5">

                                <mpeg7:Name xml:lang="en">mp4</mpeg7:Name>

                            </mpeg7:FileFormat>

                            <mpeg7:FileSize>282355218</mpeg7:FileSize>

                            <mpeg7:BitRate>773575940</mpeg7:BitRate>

                            <mpeg7:VisualCoding>

                                <mpeg7:Format href="urn:x-mpeg7-mediainfo:cs:VisualCodingFormatCS:2009:54" colorDomain="color">

                                    <mpeg7:Name xml:lang="en">ProRes</mpeg7:Name>

                                </mpeg7:Format>

                                <mpeg7:Pixel aspectRatio="1.000" />

                                <mpeg7:Frame aspectRatio="1.778" height="2160" width="3840" rate="23.976" structure="progressive" />

                            </mpeg7:VisualCoding>

                            <mpeg7:AudioCoding>

                                <mpeg7:Format href="urn:mpeg:mpeg7:cs:AudioCodingFormatCS:2001:8">

                                    <mpeg7:Name xml:lang="en">Linear PCM</mpeg7:Name>

                                </mpeg7:Format>

                                <mpeg7:AudioChannels>1</mpeg7:AudioChannels>

                                <mpeg7:Sample rate="48000" bitsPer="24" />

                                <mpeg7:Presentation href="urn:mpeg:mpeg7:cs:AudioPresentationCS:2001:2">

                                    <mpeg7:Name xml:lang="en">mono</mpeg7:Name>

                                </mpeg7:Presentation>

                            </mpeg7:AudioCoding>

                        </mpeg7:MediaFormat>

                    </mpeg7:MediaProfile>

                </mpeg7:MediaInformation>

                <mpeg7:CreationInformation>

                    <mpeg7:Creation>

                        <mpeg7:Title>metatest.mov</mpeg7:Title>

                        <mpeg7:CreationCoordinates>

                            <mpeg7:Date>

                                <!-- Encoded date -->

                                <mpeg7:TimePoint>2022-12-08T13:59:04+00:00</mpeg7:TimePoint>

                            </mpeg7:Date>

                        </mpeg7:CreationCoordinates>

                        <mpeg7:CreationTool>

                            <mpeg7:Tool>

                                <!-- Writing library -->

                                <mpeg7:Name>Apple QuickTime</mpeg7:Name>

                            </mpeg7:Tool>

                        </mpeg7:CreationTool>

                    </mpeg7:Creation>

                </mpeg7:CreationInformation>

                <mpeg7:MediaTime>

                    <mpeg7:MediaTimePoint>T00:00:00:0F1000</mpeg7:MediaTimePoint>

                    <mpeg7:MediaDuration>PT0H0M2S22N24F</mpeg7:MediaDuration>

                </mpeg7:MediaTime>

            </mpeg7:AudioVisual>

        </mpeg7:MultimediaContent>

    </mpeg7:Description>

</mpeg7:Mpeg7>


To cut a long story short: Am I correct in concluding that technical metadata from MediaInfo for which no elements are defined in the standards (EBUCore, MPEG-7) will no be transmitted?!

Because that leads me to conclude better not to apply those standards (namely EBUCore, MPEG-7) and rather choose PBCore for my use case.


Sorry for this long text. As I said, I am more than grateful for any advice!


Best

Stefan

Dave Rice

unread,
Jan 17, 2023, 2:30:31 PM1/17/23
to pbcor...@googlegroups.com
Hi Stefan,

It looks like you're using the PBCore2 output, which I wrote in 2014 and then (with thx to WGBH) updated in 2018. Jerome Martinez wrote the EBUCore and MPEG-7 exports, so there's some differences due to the standards but also likely some due to the styles of the authors. I really wanted to preserve a certain list of significant characteristics about the audiovisual content, whether or not there was a specific field for it in PBCore, and also care for unexpected data that wasn't mapped elsewhere. I also wanted to write the mapping in such a way that new MediaInfo values added later would be included in the PBCore2 export without necessarily requiring that the mapping be updated at each instance of a change to the MediaInfo value list. So whereas the approach with the EBUCore and MPEG-7 exports select certain MediaInfo values and places them into the context of the standard, with the PBCore2 output I did that, but then dumped everything else into essenceTrackAnnotation and instantiationAnnotation while omitting everything that was already specifically mapped elsewhere. That's why there's two massive if-it's-not-this-then-it's-an-annotation conditions at https://github.com/MediaArea/MediaInfoLib/blob/7e3169c7417686739f5d1bc55a6c2d4b404d36e1/Source/MediaInfo/Export/Export_PBCore2.cpp#L267-L354 and https://github.com/MediaArea/MediaInfoLib/blob/7e3169c7417686739f5d1bc55a6c2d4b404d36e1/Source/MediaInfo/Export/Export_PBCore2.cpp#L546-L619. I hope this helps, also the Export_PBCore2.cpp file uses a fairly small set of code snippets that are reused within various conditionals so it (relatively) isn't too hard to read to see what PBCore value in the export comes from where in the Mediainfo values.

For instance:

//essenceTrackFrameSize
if (!MI.Get(StreamKind, StreamPos, __T("Width")).empty())
{
    Ztring framesize;
    framesize=MI.Get(StreamKind, StreamPos, __T("Width"));
    framesize+=__T("x");
    framesize+=MI.Get(StreamKind, StreamPos, __T("Height"));
    Node_EssenceTrack->Add_Child("essenceTrackFrameSize", framesize);
}

should read as: if there's a width value, then pbcore:essenceTrackFrameSize should be set to the width, then a letter 'x', then the height.

Kind Regards,
Dave Rice

--
You received this message because you are subscribed to the Google Groups "PBCore Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pbcore-talk...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/pbcore-talk/c58178fd-e1e8-4be2-9b7c-e47d206a0f90n%40googlegroups.com.

Reply all
Reply to author
Forward
0 new messages