1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
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()
|