#!/usr/bin/env python
# From http://www.dwerg.net/projects/python/srttool.py
# Converts MPSub 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
global timetrack
titlemsg = re.compile('TITLE=.')
authormsg = re.compile('AUTHOR=.')
class CorruptMpsError(Exception):
"""
The MPSub 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_seconds(totalseconds):
(hours, secs_remainder) = time_calculation(totalseconds, 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
def get_times(line):
global timetrack
parts = line.split(' ')
try:
start_time = float(parts[0]) + timetrack
end_time = float(parts[1]) + start_time
timetrack = end_time
start = convert_seconds(start_time)
end = convert_seconds(end_time)
return (start, end)
except IndexError:
raise CorruptMpsError("Corrupt Time Format")
def convert_block(lines):
global savecmml
global id
global firstpart
if not firstpart:
(start, end) = get_times(lines[0])
savecmml += '