Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!perl
- use File::Format::RIFF;
- # in.avi is the ffmpeg-encoded avi without timecode
- # timecode value can be read depending on source format, e.g. with ffprobe
- open(FFMPEG,'in.avi') or die "Could not open file: $!";
- my $ffmpeg = File::Format::RIFF->read(\*FFMPEG);
- close(FFMPEG);
- my $timecode = '22:22:22:22';
- # create Tdat-chunk in file
- my ($list) = new File::Format::RIFF::List;
- $list->type('Tdat');
- $list->addChunk( tc_O => $timecode );
- $list->addChunk( tc_A => $timecode );
- $ffmpeg->push($list);
- # this is just a dummy xml-template to make the timecode work;
- # if one wants to be exact, you have to fill in the correct metadata below, e.g. creation time / paths etc.
- # the blank lines at the end are important: See http://en.wikipedia.org/wiki/Extensible_Metadata_Platform
- my $xml = << "EOL";
- <?xpacket begin="?" id="W5M0MpCehiHzreSzNTczkc9d"?>
- <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.6-c014 79.156797, 2014/08/20-09:53:02">
- <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:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
- xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#"
- xmlns:creatorAtom="http://ns.adobe.com/creatorAtom/1.0/"
- xmlns:xmpDM="http://ns.adobe.com/xmp/1.0/DynamicMedia/"
- xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#"
- xmlns:dc="http://purl.org/dc/elements/1.1/">
- <xmp:CreatorTool>Adobe After Effects CC 2014 (Windows)</xmp:CreatorTool>
- <xmp:CreateDate>2014-12-12T14:01:15.00581</xmp:CreateDate>
- <xmp:MetadataDate>2014-12-12T15:01:28+01:00</xmp:MetadataDate>
- <xmp:ModifyDate>2014-12-12T15:01:28+01:00</xmp:ModifyDate>
- <xmpMM:InstanceID>xmp.iid:da86ff46-c9d2-b14b-b9d6-2d5aeed67922</xmpMM:InstanceID>
- <xmpMM:DocumentID>xmp.did:32abe6c2-a896-284e-b346-0744a6ca2865</xmpMM:DocumentID>
- <xmpMM:OriginalDocumentID>xmp.did:32abe6c2-a896-284e-b346-0744a6ca2865</xmpMM:OriginalDocumentID>
- <xmpMM:History>
- <rdf:Seq>
- <rdf:li rdf:parseType="Resource">
- <stEvt:action>created</stEvt:action>
- <stEvt:instanceID>xmp.iid:32abe6c2-a896-284e-b346-0744a6ca2865</stEvt:instanceID>
- <stEvt:when>2014-12-12T15:01:18+01:00</stEvt:when>
- <stEvt:softwareAgent>Adobe After Effects CC 2014 (Windows)</stEvt:softwareAgent>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <stEvt:action>saved</stEvt:action>
- <stEvt:instanceID>xmp.iid:da86ff46-c9d2-b14b-b9d6-2d5aeed67922</stEvt:instanceID>
- <stEvt:when>2014-12-12T15:01:28+01:00</stEvt:when>
- <stEvt:softwareAgent>Adobe After Effects CC 2014 (Windows)</stEvt:softwareAgent>
- <stEvt:changed>/</stEvt:changed>
- </rdf:li>
- </rdf:Seq>
- </xmpMM:History>
- <creatorAtom:windowsAtom rdf:parseType="Resource">
- <creatorAtom:extension>.aep</creatorAtom:extension>
- <creatorAtom:invocationFlags>-ep</creatorAtom:invocationFlags>
- </creatorAtom:windowsAtom>
- <creatorAtom:macAtom rdf:parseType="Resource">
- <creatorAtom:applicationCode>1180193859</creatorAtom:applicationCode>
- <creatorAtom:invocationAppleEvent>1131559026</creatorAtom:invocationAppleEvent>
- </creatorAtom:macAtom>
- <creatorAtom:aeProjectLink rdf:parseType="Resource">
- <creatorAtom:compositionID>84</creatorAtom:compositionID>
- <creatorAtom:renderQueueItemID>96</creatorAtom:renderQueueItemID>
- <creatorAtom:renderOutputModuleIndex>0</creatorAtom:renderOutputModuleIndex>
- <creatorAtom:fullPath>F:\avi-problem\ap.aep</creatorAtom:fullPath>
- </creatorAtom:aeProjectLink>
- <xmpDM:videoFrameSize rdf:parseType="Resource">
- <stDim:w>640</stDim:w>
- <stDim:h>360</stDim:h>
- <stDim:unit>pixel</stDim:unit>
- </xmpDM:videoFrameSize>
- <xmpDM:videoFrameRate>25.000000</xmpDM:videoFrameRate>
- <xmpDM:videoFieldOrder>Progressive</xmpDM:videoFieldOrder>
- <xmpDM:videoPixelAspectRatio>1/1</xmpDM:videoPixelAspectRatio>
- <xmpDM:audioSampleRate>48000</xmpDM:audioSampleRate>
- <xmpDM:audioSampleType>16Int</xmpDM:audioSampleType>
- <xmpDM:audioChannelType>Stereo</xmpDM:audioChannelType>
- <xmpDM:startTimecode rdf:parseType="Resource">
- <xmpDM:timeFormat>25Timecode</xmpDM:timeFormat>
- <xmpDM:timeValue>$timecode</xmpDM:timeValue>
- </xmpDM:startTimecode>
- <xmpDM:altTimecode rdf:parseType="Resource">
- <xmpDM:timeValue>$timecode</xmpDM:timeValue>
- <xmpDM:timeFormat>25Timecode</xmpDM:timeFormat>
- </xmpDM:altTimecode>
- <xmpDM:startTimeScale>25</xmpDM:startTimeScale>
- <xmpDM:startTimeSampleSize>1</xmpDM:startTimeSampleSize>
- <dc:format>AVI</dc:format>
- </rdf:Description>
- </rdf:RDF>
- </x:xmpmeta>
- <?xpacket end="w"?>
- EOL
- # create XML-chunk in file
- my ($chunk) = new File::Format::RIFF::Chunk;
- $chunk->id('_PMX');
- $chunk->data($xml);
- $ffmpeg->push($chunk);
- # write file
- open(OUT,">out.avi" ) or die "Could not open file: $!";
- binmode(OUT);
- $ffmpeg->write(\*OUT);
- close(OUT);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement