aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWolfgang Draxinger <Wolfgang.Draxinger@draxit.de>2011-03-25 22:29:43 +0100
committerWolfgang Draxinger <Wolfgang.Draxinger@draxit.de>2011-03-25 22:29:43 +0100
commite2c048c4e05d8e96f3580b3b29172423357a419d (patch)
treefdb5d6bfae2f7cf3b93a00f0939227d1d33ab0a3
downloadmkdcp-e2c048c4e05d8e96f3580b3b29172423357a419d.tar.gz
mkdcp-e2c048c4e05d8e96f3580b3b29172423357a419d.tar.bz2
initial commit
-rw-r--r--mkdcp.py132
1 files changed, 132 insertions, 0 deletions
diff --git a/mkdcp.py b/mkdcp.py
new file mode 100644
index 0000000..4147d30
--- /dev/null
+++ b/mkdcp.py
@@ -0,0 +1,132 @@
+#!/usr/bin/env python
+# -*- coding: utf8 -*-
+
+def generate_SMPTE_CPL():
+
+import subprocess, time
+
+try:
+ from lxml import etree
+ print("running with lxml.etree")
+except ImportError:
+ try:
+ # Python 2.5
+ import xml.etree.cElementTree as etree
+ print("running with cElementTree on Python 2.5+")
+ except ImportError:
+ try:
+ # Python 2.5
+ import xml.etree.ElementTree as etree
+ print("running with ElementTree on Python 2.5+")
+ except ImportError:
+ try:
+ # normal cElementTree install
+ import cElementTree as etree
+ print("running with cElementTree")
+ except ImportError:
+ try:
+ # normal ElementTree install
+ import elementtree.ElementTree as etree
+ print("running with ElementTree")
+ except ImportError:
+ print("Failed to import ElementTree from any known place")
+
+CREATOR = 'DraxIT mkdcp 0.1'
+ISSUEDATE = time.strftime('%FT%T%z')
+ISSUER = ''
+
+def asdcp_genuuid():
+ return subprocess.Popen(['asdcp-test', '-u'], stdout=subprocess.PIPE).stdout.read().strip()
+
+def asdcp_digest(filename):
+ digest, file = subprocess.Popen(['asdcp-test', '-t', filename], stdout=subprocess.PIPE).stdout.read().strip().split(' ')
+ return digest
+
+class Asset:
+ def __init__(self):
+ self.UUID = asdcp_genuuid()
+
+ def yield_cpl_SMPTE(self, head_element)
+ etree.SubElement(_asset, 'Id' ).text = 'urn:uuid:' + asset.UUID
+ etree.SubElement(_asset, 'AnnotationText' ).text = escape(asset.annotation.encode('ascii', 'xmlcharrefreplace'))
+ etree.SubElement(_asset, 'Hash' ).text = asset.digest
+ etree.SubElement(_asset, 'EditRate' ).text = asset.editrate
+ etree.SubElement(_asset, 'EntryPoint' ).text = asset.entrypoint
+ etree.SubElement(_asset, 'IntrinsicDuration' ).text = asset.intrisicduration
+ etree.SubElement(_asset, 'Duration' ).text = asset.duration
+
+class CompositionPlayList(Asset):
+ def __init__(self, title, kind, reellist=None, rating=None):
+ self.UUID = asdcp_genuuid()
+ if reellist:
+ self.reellist = reellist
+ else:
+ self.reellist = []
+
+ self.rating = rating
+
+ def AddReel(self, reel):
+ self.reellists.append(reel)
+
+ def yield_SMPTE(reellist):
+ from xml.sax.saxutils import escape
+
+ title = escape(self.title.encode('ascii', 'xmlcharrefreplace'))
+
+ # CPL head
+ cpl = etree.Element('{http://www.smpte-ra.org/schemas/429-7/2006/CPL}CompositionPlaylist')
+
+ etree.SubElement(cpl, 'Id' ).text = 'urn:uuid:' + self.UUID
+ etree.SubElement(cpl, 'IssueDate' ).text = ISSUEDATE
+ etree.SubElement(cpl, 'Issuer' ).text = ISSUER
+ etree.SubElement(cpl, 'Creator' ).text = CREATOR
+ etree.SubElement(cpl, 'ContentTitleText' ).text = title
+ etree.SubElement(cpl, 'ContentKind' ).text = self.kind
+
+ contentversion = etree.SubElement(cpl, 'ContentVersion')
+ etree.SubElement(contentversion, 'Id' ).text = 'urn:uri:' + title.replace(' ','-') + '_' + ISSUEDATE
+ etree.SubElement(contentversion, 'LabelText' ).text = title
+
+ etree.SubElement(cpl, 'RatingList')
+
+ # Reels
+ _reellist = etree.SubElement(cpl, 'ReelList')
+
+ for reel in reellist:
+ _reel = etree.SubElement(_reellist, 'Reel')
+ etree.SubElement(_reel, 'Id').text = 'urn:uuid:' + reel.UUID
+ _assetlist = etree.SubElement(_reel, 'AssetList')
+
+ for asset in reel.assetlist:
+ asset.cpl_SMPTE(_reel)
+
+ if isinstance(asset, PictureTrack):
+ if isinstance(asset, StereoscopicPictureTrack):
+ _asset = etree.SubElement(_assetlist, '{http://www.smpte-ra.org/schemas/429-10/2008/Main-Stereo-Picture-CPL}MainStereoscopicPicture', nsmap={'msp-cpl': 'http://www.smpte-ra.org/schemas/429-10/2008/Main-Stereo-Picture-CPL'} )
+ if isinstance(asset, SoundTrack):
+ _asset = etree.SubElement(_assetlist, 'MainSound')
+
+
+ return etree.tostring(cpl, encoding="UTF-8")
+
+
+class PackingList(Asset):
+
+class Track(Asset):
+ pass
+
+class SoundTrack(Track):
+ def yield_cpl_SMPTE(self, head_element):
+ _asset = etree.SubElement(head_element, 'MainSound')
+ super().yield_cpl_SMPTE(_asset)
+
+class PictureTrack(Track):
+ def yield_cpl_SMPTE(self, head_element):
+ _asset = etree.SubElement(head_element, 'MainPicture')
+ super().yield_cpl_SMPTE(_asset)
+
+
+class Reel:
+ def __init__(self):
+ self.UUID=asdcp_genuid()
+