Removed offset math for now

This commit is contained in:
Jamie Hardt
2019-10-08 11:34:56 -07:00
parent 0c64403819
commit 0162ad9b2e
3 changed files with 20 additions and 35 deletions

View File

@@ -5,9 +5,6 @@ import sys
parser = OptionParser()
parser.add_option('-t','--timecode', dest='convert_times', default=False, action='store_true',
help="Include timecode converted to seconds in output.")
parser.add_option('-z','--offset', dest='apply_start_offset', default=False, action='store_true',
help='Apply session start offset to converted start and finish timecodes on '
'clips and markers. Implies -t.')
parser.usage = "ptulsconv [-tz] TEXT_EXPORT.txt"
if __name__ == "__main__":
@@ -18,6 +15,4 @@ if __name__ == "__main__":
exit(-1)
convert(input_file=args[1],
convert_times=(options.convert_times or options.apply_start_offset),
apply_session_start=options.apply_start_offset,
output=sys.stdout)
convert_times=options.convert_times, output=sys.stdout)

View File

@@ -2,7 +2,7 @@ import ptulsconv
import json
import sys
def convert(input_file, convert_times, apply_session_start, output=sys.stdout):
def convert(input_file, convert_times, output=sys.stdout):
parsed = dict()
with open(input_file, 'r') as file:
ast = ptulsconv.protools_text_export_grammar.parse(file.read())
@@ -11,7 +11,6 @@ def convert(input_file, convert_times, apply_session_start, output=sys.stdout):
if convert_times:
xform = ptulsconv.transformations.TimecodeInterpreter()
xform.apply_session_start = apply_session_start
parsed = xform.transform(parsed)
json.dump(parsed, output)

View File

@@ -1,4 +1,5 @@
from timecode import Timecode, TimecodeError
from . import broadcast_timecode
import math
class Transformation:
def transform(self, input_dict) -> dict:
@@ -13,54 +14,44 @@ class TimecodeInterpreter(Transformation):
def transform(self, input_dict: dict) -> dict:
retval = super().transform(input_dict)
rate = input_dict['header']['timecode_format']
start_tc = self.convert_time(input_dict['header']['start_timecode'],
rate, offset=None)
start_tc = self.convert_time(input_dict['header']['start_timecode'], rate,
drop_frame=input_dict['header']['timecode_drop_frame'])
retval['header']['start_timecode_decoded'] = start_tc
convert_start_tc = None
if self.apply_session_start is True:
convert_start_tc = Timecode(framerate=input_dict['header']['timecode_format'],
start_timecode=input_dict['header']['start_timecode'])
retval['tracks'] = self.convert_tracks(input_dict['tracks'], timecode_rate=rate,
session_start=convert_start_tc)
drop_frame=retval['header']['timecode_drop_frame'])
for marker in retval['markers']:
marker['location_decoded'] = self.convert_time(marker['location'], rate,
convert_start_tc)
drop_frame=retval['header']['timecode_drop_frame'])
return retval
def convert_tracks(self, tracks, timecode_rate, session_start):
def convert_tracks(self, tracks, timecode_rate, drop_frame):
for track in tracks:
new_clips = []
for clip in track['clips']:
new_clips.append( self.convert_clip( clip ,
timecode_rate= timecode_rate,
session_start=session_start ))
new_clips.append( self.convert_clip(clip, drop_frame=drop_frame, timecode_rate= timecode_rate) )
track['clips'] = new_clips
return tracks
def convert_clip(self, clip, timecode_rate, session_start):
def convert_clip(self, clip, timecode_rate, drop_frame):
time_fields = ['start_time', 'end_time', 'duration', 'timestamp']
for time_field in time_fields:
if clip[time_field] is not None:
if time_field == 'duration':
clip[time_field + "_decoded"] = self.convert_time(clip[time_field],
framerate=timecode_rate, offset=None)
else:
clip[time_field + "_decoded"] = self.convert_time(clip[time_field],
framerate=timecode_rate, offset=session_start)
clip[time_field + "_decoded"] = self.convert_time(clip[time_field], drop_frame=drop_frame,
frame_rate=timecode_rate)
return clip
def convert_time(self, time_string, framerate, offset= None):
tc = Timecode(framerate=framerate, start_timecode=time_string)
if offset is not None:
tc = tc - offset
def convert_time(self, time_string, frame_rate, drop_frame=False):
lfps = math.ceil(frame_rate)
return dict(frames=tc.frames, framrate= framerate, seconds= (float(tc.frames) / float(tc.framerate)))
frame_count = broadcast_timecode.smpte_to_frame_count(time_string, lfps, drop_frame_hint=drop_frame)
return dict(frame_count=frame_count, logical_fps=lfps, drop_frame=drop_frame)