mirror of
https://github.com/iluvcapra/ptulsconv.git
synced 2025-12-31 08:50:48 +00:00
More command options
This commit is contained in:
@@ -4,9 +4,11 @@ import sys
|
|||||||
|
|
||||||
parser = OptionParser()
|
parser = OptionParser()
|
||||||
parser.usage = "ptulsconv TEXT_EXPORT.txt"
|
parser.usage = "ptulsconv TEXT_EXPORT.txt"
|
||||||
parser.add_option('-i', dest='in_time', help='Set in time to grab a subsequence of events. '
|
parser.add_option('-i', dest='in_time', help="Don't output events occurring before this timecode, and offset"
|
||||||
'Give value as a timecode in current session\'s rate.')
|
" all events relative to this timecode.", metavar='TC')
|
||||||
parser.add_option('-o', dest='out_time', help='Set out time to grab a subsequence of events.')
|
parser.add_option('-o', dest='out_time', help="Don't output events occurring after this timecode.", metavar='TC')
|
||||||
|
parser.add_option('-P','--progress', default=False, action='store_true', dest='show_progress', help='Show progress bar.')
|
||||||
|
parser.add_option('-m','--include-muted', default=False, action='store_true', dest='include_muted', help='Read muted clips.')
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
(options, args) = parser.parse_args(sys.argv)
|
(options, args) = parser.parse_args(sys.argv)
|
||||||
@@ -15,4 +17,5 @@ if __name__ == "__main__":
|
|||||||
parser.print_help(sys.stderr)
|
parser.print_help(sys.stderr)
|
||||||
exit(-1)
|
exit(-1)
|
||||||
|
|
||||||
convert(input_file=args[1], start=options.in_time, end=options.out_time, output=sys.stdout)
|
convert(input_file=args[1], start=options.in_time, end=options.out_time, include_muted=options.include_muted,
|
||||||
|
progress=options.show_progress, output=sys.stdout)
|
||||||
|
|||||||
@@ -93,14 +93,14 @@ def fmp_dump(data, input_file_name, output):
|
|||||||
output.write(xmlstr)
|
output.write(xmlstr)
|
||||||
|
|
||||||
|
|
||||||
def convert(input_file, output_format='fmpxml', start=None, end=None, output=sys.stdout):
|
def convert(input_file, output_format='fmpxml', start=None, end=None, progress=False, include_muted=False, output=sys.stdout):
|
||||||
with open(input_file, 'r') as file:
|
with open(input_file, 'r') as file:
|
||||||
ast = ptulsconv.protools_text_export_grammar.parse(file.read())
|
ast = ptulsconv.protools_text_export_grammar.parse(file.read())
|
||||||
dict_parser = ptulsconv.DictionaryParserVisitor()
|
dict_parser = ptulsconv.DictionaryParserVisitor()
|
||||||
parsed = dict_parser.visit(ast)
|
parsed = dict_parser.visit(ast)
|
||||||
|
|
||||||
tcxform = ptulsconv.transformations.TimecodeInterpreter()
|
tcxform = ptulsconv.transformations.TimecodeInterpreter()
|
||||||
tagxform = ptulsconv.transformations.TagInterpreter()
|
tagxform = ptulsconv.transformations.TagInterpreter(show_progress=progress, ignore_muted=(not include_muted) )
|
||||||
|
|
||||||
parsed = tagxform.transform(tcxform.transform(parsed))
|
parsed = tagxform.transform(tcxform.transform(parsed))
|
||||||
|
|
||||||
|
|||||||
@@ -121,9 +121,10 @@ class TagInterpreter(Transformation):
|
|||||||
def generic_visit(self, node, visited_children):
|
def generic_visit(self, node, visited_children):
|
||||||
return visited_children or node
|
return visited_children or node
|
||||||
|
|
||||||
def __init__(self, ignore_muted=True):
|
def __init__(self, ignore_muted=True, show_progress=False):
|
||||||
self.visitor = TagInterpreter.TagListVisitor()
|
self.visitor = TagInterpreter.TagListVisitor()
|
||||||
self.ignore_muted = ignore_muted
|
self.ignore_muted = ignore_muted
|
||||||
|
self.show_progress = show_progress
|
||||||
|
|
||||||
def transform(self, input_dict: dict) -> dict:
|
def transform(self, input_dict: dict) -> dict:
|
||||||
transformed = list()
|
transformed = list()
|
||||||
@@ -132,8 +133,12 @@ class TagInterpreter(Transformation):
|
|||||||
title_tags = self.parse_tags(input_dict['header']['session_name'], "<Session Name>")
|
title_tags = self.parse_tags(input_dict['header']['session_name'], "<Session Name>")
|
||||||
markers = sorted(input_dict['markers'], key=lambda m: m['location_decoded']['frame_count'])
|
markers = sorted(input_dict['markers'], key=lambda m: m['location_decoded']['frame_count'])
|
||||||
|
|
||||||
|
if self.show_progress:
|
||||||
|
track_iter = tqdm(input_dict['tracks'], desc="Reading tracks...", unit='Track')
|
||||||
|
else:
|
||||||
|
track_iter = input_dict['tracks']
|
||||||
|
|
||||||
for track in tqdm(input_dict['tracks'], desc="Reading tracks...", unit='Track'):
|
for track in track_iter:
|
||||||
if 'Muted' in track['state'] and self.ignore_muted:
|
if 'Muted' in track['state'] and self.ignore_muted:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@@ -210,13 +215,18 @@ class TagInterpreter(Transformation):
|
|||||||
break
|
break
|
||||||
return retval
|
return retval
|
||||||
|
|
||||||
|
def report(self, mesg, *args):
|
||||||
|
print(mesg % ( args) , file=sys.stderr)
|
||||||
|
sys.stderr.write("\033[F")
|
||||||
|
sys.stderr.write("\033[K")
|
||||||
|
|
||||||
def parse_tags(self, source, context_str=None):
|
def parse_tags(self, source, context_str=None):
|
||||||
try:
|
try:
|
||||||
parse_tree = self.tag_grammar.parse(source)
|
parse_tree = self.tag_grammar.parse(source)
|
||||||
return self.visitor.visit(parse_tree)
|
return self.visitor.visit(parse_tree)
|
||||||
except IncompleteParseError as e:
|
except IncompleteParseError as e:
|
||||||
if context_str is not None:
|
if context_str is not None:
|
||||||
print("Error reading tags in: ", context_str, file=sys.stderr)
|
self.report("Error reading tags in: ")
|
||||||
|
|
||||||
trimmed_source = source[:e.pos]
|
trimmed_source = source[:e.pos]
|
||||||
parse_tree = self.tag_grammar.parse(trimmed_source)
|
parse_tree = self.tag_grammar.parse(trimmed_source)
|
||||||
|
|||||||
Reference in New Issue
Block a user