[cvs-annodex] commit (/annodex):
+scripts/trunk/subtitles/pheonix2cmml.py
cchiu
nobody at lists.annodex.net
Wed Feb 8 10:44:13 EST 2006
Update of /annodex (new revision 1984)
Added files:
scripts/trunk/subtitles/pheonix2cmml.py
Log Message:
Added Pheonix (PJS) to CMML Script
Added: scripts/trunk/subtitles/pheonix2cmml.py
===================================================================
--- scripts/trunk/subtitles/pheonix2cmml.py 2006-02-07 23:37:16 UTC (rev 1983)
+++ scripts/trunk/subtitles/pheonix2cmml.py 2006-02-07 23:44:13 UTC (rev 1984)
@@ -0,0 +1,104 @@
+#!/usr/bin/env python
+# From http://www.dwerg.net/projects/python/srttool.py
+# Converts PJS Scripts into CMML
+
+import re
+import sys
+import math
+global savecmml
+global id
+
+class CorruptPjsError(Exception):
+ """
+ The PJS File is incorrectly formatted
+ """
+ pass
+
+def time_calculation(seconds, amt_in_sec):
+ val = seconds / amt_in_sec
+ val_rounded = math.floor(val)
+ secs_remainder = (val * amt_in_sec) - (val_rounded * amt_in_sec)
+ return (val_rounded, secs_remainder)
+
+def convert_timeperiod(frame, fps):
+ try:
+ totalsec = frame / fps
+ (hours, secs_remainder) = time_calculation(totalsec, 3600)
+ (minutes, secs_remainder) = time_calculation(secs_remainder, 60)
+ (secs, millisecs) = time_calculation(secs_remainder, 1)
+ millisecs = round(millisecs*1000)
+ timeperiod = '%(val1)02d:%(val2)02d:%(val3)02d.%(val4)03d' % {'val1':hours, 'val2':minutes, 'val3':secs, 'val4':millisecs}
+ return timeperiod
+ except IndexError:
+ raise CorruptPjsError("Corrupt Frame Format")
+
+def convert_block(lines, fps):
+ global savecmml
+ global id
+ global firstpart
+ finalmsg = ''
+ if not firstpart:
+ for line in lines:
+ parts = line.split(',', 2)
+ sframe = float(parts[0])
+ eframe = float(parts[1])
+ message = parts[2].replace('"', '')
+ if message == '':
+ pass
+ else:
+ start = convert_timeperiod(sframe, fps)
+ end = convert_timeperiod(eframe, fps)
+ savecmml += '<clip track="caption" id="c%s" start="%s" end="%s">\n' % (id, start, end)
+ savecmml += ' <desc>\n'
+ savecmml += ' ' + message + '\n'
+ savecmml += ' </desc>\n'
+ savecmml += '</clip>\n'
+ message = ''
+ id += 1
+
+def convert_clips(file, fps):
+ global savecmml
+ global firstpart
+ current = []
+ for line in file:
+ if not line.strip():
+ convert_block(current, fps)
+ if firstpart:
+ savecmml += ' <title>' + current[0] + '</title>\n'
+ firstpart = 0
+ savecmml += '</head>\n'
+ current = []
+ else:
+ current.append(line.strip())
+
+def convert_pjs(file, fps):
+ global savecmml
+ global firstpart
+ global id
+ firstpart = 1
+ id = 1
+ savecmml = '<cmml>\n'
+ savecmml += '<head>\n'
+ convert_clips (file, fps)
+ savecmml += '</cmml>\n'
+
+if __name__ == '__main__':
+ global savecmml
+ fps = None
+ print 'Frames-per-Second of Video Required:\nEnter Frames-per-Second:'
+ while not fps:
+ try:
+ fps = float(raw_input())
+ except ValueError:
+ print 'Invalid FPS Entered. Try Again.'
+ try:
+ try:
+ filesave = open(sys.argv[2], 'w')
+ convert_pjs(file(sys.argv[1]), fps)
+ filesave.write(savecmml)
+ filesave.close()
+ except IndexError:
+ convert_pjs(file(sys.argv[1]), fps)
+ print savecmml
+ except IndexError:
+ print "Usage: %s [Input PJS File] [Output CMML File]" % sys.argv[0]
\ No newline at end of file
--
cchiu
More information about the cvs-annodex
mailing list