[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