Feature #643

Extract metadata from MOV (Quicktime) files

Added by Casper Roubos about 8 years ago. Updated 7 months ago.

Status:NewStart date:01 Aug 2009
Priority:NormalDue date:
Assignee:-% Done:

0%

Category:video
Target version:1.0

Description

Hi,

Is there already spoken of a feature that also can also read IPTC metadata from Quicktime movies?

Regards,
ikke_nl

DSC_5363_metadata.MOV - Adds XMP data to the original file. (3.44 MB) Ben Touchette, 28 Feb 2017 20:13


Related issues

Related to Exiv2 - Bug #1068: Video Code Umbrella Assigned 26 Apr 2015

History

#1 Updated by Steve Wright over 7 years ago

Old Mac OS / OS X user here (currently enjoying a "forced sojourn" in Windows XP Pro and Ubuntu). Not a developer or coder by any stretch, however.

I doubt there's a discrete "layer" or "block" in any or every MOV file from which meta information could be extracted. And even if there was, it's still a question of coming up with a reliable way to get at it.

From what I remember, it was easier to add or retrieve tags from the .mp4 format than .mov. The routine excuse that was always given was that, early on in the course of its development, Apple followed more than one "track" with the .mov format so that, in the end-up, several different methods of introducing relevant information to the file were developed (including the "hint" format of MOV, later revived for Quick Time Streaming Server), each one equally useful to content creators if not to the home user. And then they decided to add licensed, proprietary codecs, which meant puzzling out the best method of doing it the same way with (and sometimes in spite of) new and different tools to work with. Apple MPEG-4, being an MPEG-1 Layer 2 derivative, was newer and coders approached it from that perspective, with decidedly and understandably better results. MOV is a jungle of code and "we'll let you have this, but you have to pay for that" kind of thinking on both Apple's part and that of the licensors/lessors of the other codecs.

S.

#2 Updated by Robin Mills about 2 years ago

  • Category changed from iptc to image format
  • Target version set to 1.0

#3 Updated by Alan Pater about 2 years ago

Do quicktime files contain IPTC metadata? A superficial look on my part seems to show that they contain their own format. Perhaps we need a Exif.quicktime set of tags, similiar to makernotes rather then IPTC or XMP.

#4 Updated by Alan Pater about 2 years ago

  • Category changed from image format to video

#5 Updated by Robin Mills about 2 years ago

Alan

There's code in the video codebase:

754 rmills@rmillsmbp:~/gnu/exiv2/trunk $ find . -name "*" | grep quick
./include/exiv2/quicktimevideo.hpp
./src/quicktimevideo.cpp
755 rmills@rmillsmbp:~/gnu/exiv2/trunk $ 
And in the test files:
764 rmills@rmillsmbp:~/gnu/exiv2/testdata/trunk $ find . | grep quick
./video/video-quicktime.mp4
We're going to have to revisit and spend time on the video code.

For the moment, I've gone over all the issues in Redmine and allocated them to one of three "Target versions":

v0.26: I hope we can ship that in spring 2016
v1.0: Eventually
Review: Most of those are ancient things and can be closed (or moved to v0.26 or v1.0)

When v0.26 is ready, the issue list should be around 30 items (all in 1.0) and we can decide what to target for v0.27. I hope we'll find a volunteer to work on the video code in v0.27.

I'm rather worried about loosing Niels. I've never understood the MakerNote and Niels has dealt so effectively with that.

#6 Updated by Robin Mills about 2 years ago

XMP can be stored in a quicktime (.mov) file. It's described in Adobe's spec: XMPSpecificationPart3.pdf p29. We have a QT test file exiv2/testdata/trunk/video/video-quicktime.mp4 however I don't believe it contains XMP.

I believe Abhinav's focus in the video-read project (GSoC2012) was to read "native" metadata in video file: duration, resolution and that kind of thing. He probably assumed (not unreasonably) that XMP should be handled by the existing XMPsdk. Mahesh followed Abhinav's lead and added write capability for the same "native" data.

Mahesh added some very good documents about the structure of RIFF and Matrovska files to the Wiki. http://dev.exiv2.org/projects/exiv2/wiki Perhaps I can use those document to implement -pS (printStructure) and -pX for video files. If nothing else, those will be useful tools before revisiting the "native" video code.

#941 is to upgrade to the latest XMPsdk and may provide Video/XMP support without additional effort by Team Exiv2. That might be available for v0.26.

For the moment, "native" video support is a build option and declared "experimental". I can't honestly seeing it getting attention in v0.26 and that's why I've set the Target version to 1.0.

#7 Updated by Alan Pater about 2 years ago

Yes, I have seen that quicktime (.mov) files CAN contain XMP, but the samples I have don't seem to contain an XMP block.
The specific .MOV file I am looking at is: http://dev.exiv2.org/attachments/374/DSC_5363.MOV

What confuses me is that exiv2 is still reporting the metadata in that file as Xmp.video properties even when the file does not contain any native XMP that I can see. Am I looking in the wrong place?

#8 Updated by Robin Mills about 2 years ago

I don't believe that file has XMP embedded. My (stupid) way of looking is to use 'strings' and grep it for 'adobe':

688 rmills@rmillsmbp:~/gnu/exiv2/trunk/test/data $ strings ~/Downloads/DSC_5363.MOV | grep adobe
689 rmills@rmillsmbp:~/gnu/exiv2/trunk/test/data $ 
Here's an example where I find an xml block (I think you helped me with 922a)
 686 rmills@rmillsmbp:~/gnu/exiv2/trunk/test/data $ strings exiv2-bug922a.jpg | grep adobe
http://ns.adobe.com/xap/1.0/
" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0-Exiv2"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmp:Rating="0" xmp:ModifyDate="2015-02-13T20:46:51-06:00"> <dc:title> <rdf:Alt> <rdf:li xml:lang="x-default">the rest drink soda</rdf:li> <rdf:li xml:lang="en-GB">the Brits are in the bar</rdf:li> <rdf:li xml:lang="de-DE">the Germans like beer</rdf:li> </rdf:Alt> </dc:title> </rdf:Description> </rdf:RDF> </x:xmpmeta>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 <?xpacket end="w"?>
687 rmills@rmillsmbp:~/gnu/exiv2/trunk/test/data $ 
And pretty printing it with -pX yields:
$ exiv2 -pX exiv2-bug922a.jpg | xmllint -pretty 1 - 
<?xml version="1.0"?>
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0-Exiv2">
  <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <rdf:Description xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/" rdf:about="" xmp:Rating="0" xmp:ModifyDate="2015-02-13T20:46:51-06:00">
      <dc:title>
        <rdf:Alt>
          <rdf:li xml:lang="x-default">the rest drink soda</rdf:li>
          <rdf:li xml:lang="en-GB">the Brits are in the bar</rdf:li>
          <rdf:li xml:lang="de-DE">the Germans like beer</rdf:li>
        </rdf:Alt>
      </dc:title>
    </rdf:Description>
  </rdf:RDF>
</x:xmpmeta>
<?xpacket end="w"?>
688 rmills@rmillsmbp:~/gnu/exiv2/trunk/test/data $ 
If you can find a .MOV file with embedded XMP, can you add it to this issue report and I'll use it when I implement -pS for quicktime files. And of course for matravoska, riff, and asf if you find them.
-rw-r--r--+ 1 rmills  staff    66K 28 Jun 13:00 quicktimevideo.cpp
-rw-r--r--+ 1 rmills  staff    48K 28 Jun 13:00 riffvideo.cpp
-rw-r--r--+ 1 rmills  staff    30K 28 Jun 13:00 asfvideo.cpp
-rw-r--r--+ 1 rmills  staff    35K 28 Jun 13:00 matroskavideo.cpp
And it's quite possible that our video/XMP support is working OK already.

I can't say anything about reporting Xmp.Video anything. A bug maybe? I don't know. I've never thought about this.

#9 Updated by Ben Touchette 7 months ago

Updated the DSC_5363.MOV file to add XMP metadata.

Also available in: Atom PDF

Redmine Appliance - Powered by TurnKey Linux