Advertisement
Guest User

avi_riff_timecode.pl

a guest
Dec 16th, 2014
409
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 5.46 KB | None | 0 0
  1. #!perl
  2.  
  3. use File::Format::RIFF;
  4.  
  5. # in.avi is the ffmpeg-encoded avi without timecode
  6. # timecode value can be read depending on source format, e.g. with ffprobe
  7. open(FFMPEG,'in.avi') or die "Could not open file: $!";
  8. my $ffmpeg = File::Format::RIFF->read(\*FFMPEG);
  9. close(FFMPEG);
  10.  
  11. my $timecode = '22:22:22:22';
  12.  
  13. # create Tdat-chunk in file
  14. my ($list) = new File::Format::RIFF::List;
  15. $list->type('Tdat');
  16. $list->addChunk( tc_O => $timecode );
  17. $list->addChunk( tc_A => $timecode );
  18. $ffmpeg->push($list);
  19.  
  20. # this is just a dummy xml-template to make the timecode work;
  21. # if one wants to be exact, you have to fill in the correct metadata below, e.g. creation time / paths etc.
  22. # the blank lines at the end are important: See http://en.wikipedia.org/wiki/Extensible_Metadata_Platform
  23. my $xml = << "EOL";
  24. <?xpacket begin="?" id="W5M0MpCehiHzreSzNTczkc9d"?>
  25. <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.6-c014 79.156797, 2014/08/20-09:53:02">
  26.    <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  27.       <rdf:Description rdf:about=""
  28.             xmlns:xmp="http://ns.adobe.com/xap/1.0/"
  29.             xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
  30.             xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#"
  31.             xmlns:creatorAtom="http://ns.adobe.com/creatorAtom/1.0/"
  32.             xmlns:xmpDM="http://ns.adobe.com/xmp/1.0/DynamicMedia/"
  33.             xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#"
  34.             xmlns:dc="http://purl.org/dc/elements/1.1/">
  35.          <xmp:CreatorTool>Adobe After Effects CC 2014 (Windows)</xmp:CreatorTool>
  36.          <xmp:CreateDate>2014-12-12T14:01:15.00581</xmp:CreateDate>
  37.          <xmp:MetadataDate>2014-12-12T15:01:28+01:00</xmp:MetadataDate>
  38.          <xmp:ModifyDate>2014-12-12T15:01:28+01:00</xmp:ModifyDate>
  39.          <xmpMM:InstanceID>xmp.iid:da86ff46-c9d2-b14b-b9d6-2d5aeed67922</xmpMM:InstanceID>
  40.          <xmpMM:DocumentID>xmp.did:32abe6c2-a896-284e-b346-0744a6ca2865</xmpMM:DocumentID>
  41.          <xmpMM:OriginalDocumentID>xmp.did:32abe6c2-a896-284e-b346-0744a6ca2865</xmpMM:OriginalDocumentID>
  42.          <xmpMM:History>
  43.             <rdf:Seq>
  44.                <rdf:li rdf:parseType="Resource">
  45.                   <stEvt:action>created</stEvt:action>
  46.                   <stEvt:instanceID>xmp.iid:32abe6c2-a896-284e-b346-0744a6ca2865</stEvt:instanceID>
  47.                   <stEvt:when>2014-12-12T15:01:18+01:00</stEvt:when>
  48.                   <stEvt:softwareAgent>Adobe After Effects CC 2014 (Windows)</stEvt:softwareAgent>
  49.                </rdf:li>
  50.                <rdf:li rdf:parseType="Resource">
  51.                   <stEvt:action>saved</stEvt:action>
  52.                   <stEvt:instanceID>xmp.iid:da86ff46-c9d2-b14b-b9d6-2d5aeed67922</stEvt:instanceID>
  53.                   <stEvt:when>2014-12-12T15:01:28+01:00</stEvt:when>
  54.                   <stEvt:softwareAgent>Adobe After Effects CC 2014 (Windows)</stEvt:softwareAgent>
  55.                   <stEvt:changed>/</stEvt:changed>
  56.                </rdf:li>
  57.             </rdf:Seq>
  58.          </xmpMM:History>
  59.          <creatorAtom:windowsAtom rdf:parseType="Resource">
  60.             <creatorAtom:extension>.aep</creatorAtom:extension>
  61.             <creatorAtom:invocationFlags>-ep</creatorAtom:invocationFlags>
  62.          </creatorAtom:windowsAtom>
  63.          <creatorAtom:macAtom rdf:parseType="Resource">
  64.             <creatorAtom:applicationCode>1180193859</creatorAtom:applicationCode>
  65.             <creatorAtom:invocationAppleEvent>1131559026</creatorAtom:invocationAppleEvent>
  66.          </creatorAtom:macAtom>
  67.          <creatorAtom:aeProjectLink rdf:parseType="Resource">
  68.             <creatorAtom:compositionID>84</creatorAtom:compositionID>
  69.             <creatorAtom:renderQueueItemID>96</creatorAtom:renderQueueItemID>
  70.             <creatorAtom:renderOutputModuleIndex>0</creatorAtom:renderOutputModuleIndex>
  71.             <creatorAtom:fullPath>F:\avi-problem\ap.aep</creatorAtom:fullPath>
  72.          </creatorAtom:aeProjectLink>
  73.          <xmpDM:videoFrameSize rdf:parseType="Resource">
  74.             <stDim:w>640</stDim:w>
  75.             <stDim:h>360</stDim:h>
  76.             <stDim:unit>pixel</stDim:unit>
  77.          </xmpDM:videoFrameSize>
  78.          <xmpDM:videoFrameRate>25.000000</xmpDM:videoFrameRate>
  79.          <xmpDM:videoFieldOrder>Progressive</xmpDM:videoFieldOrder>
  80.          <xmpDM:videoPixelAspectRatio>1/1</xmpDM:videoPixelAspectRatio>
  81.          <xmpDM:audioSampleRate>48000</xmpDM:audioSampleRate>
  82.          <xmpDM:audioSampleType>16Int</xmpDM:audioSampleType>
  83.          <xmpDM:audioChannelType>Stereo</xmpDM:audioChannelType>
  84.          <xmpDM:startTimecode rdf:parseType="Resource">
  85.             <xmpDM:timeFormat>25Timecode</xmpDM:timeFormat>
  86.             <xmpDM:timeValue>$timecode</xmpDM:timeValue>
  87.          </xmpDM:startTimecode>
  88.          <xmpDM:altTimecode rdf:parseType="Resource">
  89.             <xmpDM:timeValue>$timecode</xmpDM:timeValue>
  90.             <xmpDM:timeFormat>25Timecode</xmpDM:timeFormat>
  91.          </xmpDM:altTimecode>
  92.          <xmpDM:startTimeScale>25</xmpDM:startTimeScale>
  93.          <xmpDM:startTimeSampleSize>1</xmpDM:startTimeSampleSize>
  94.          <dc:format>AVI</dc:format>
  95.       </rdf:Description>
  96.    </rdf:RDF>
  97. </x:xmpmeta>
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119. <?xpacket end="w"?>
  120. EOL
  121.  
  122. # create XML-chunk in file
  123. my ($chunk) = new File::Format::RIFF::Chunk;
  124. $chunk->id('_PMX');
  125. $chunk->data($xml);
  126. $ffmpeg->push($chunk);
  127.  
  128. # write file
  129. open(OUT,">out.avi" ) or die "Could not open file: $!";
  130. binmode(OUT);
  131. $ffmpeg->write(\*OUT);
  132. close(OUT);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement