#!/usr/bin/env python
# From http://www.dwerg.net/projects/python/srttool.py
# Converts PJS Scripts into CMML
# More information at http://trac.annodex.net/wiki/CmmlSubtitles
## Copyright (C) 2004- Commonwealth Scientific and Industrial Research
## Organisation (CSIRO) Australia
##
## Redistribution and use in source and binary forms, with or without
## modification, are permitted provided that the following conditions
## are met:
##
## - Redistributions of source code must retain the above copyright
## notice, this list of conditions and the following disclaimer.
##
## - Redistributions in binary form must reproduce the above copyright
## notice, this list of conditions and the following disclaimer in the
## documentation and/or other materials provided with the distribution.
##
## - Neither the name of CSIRO Australia nor the names of its
## contributors may be used to endorse or promote products derived from
## this software without specific prior written permission.
##
## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
## ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
## PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ORGANISATION OR
## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
## PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
## PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
## LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
## NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
## SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
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 += '