From: James Bunton Date: Sun, 29 Aug 2010 01:07:16 +0000 (+1000) Subject: Added --fixmux option that copies input streams to an AVI before transcoding X-Git-Url: https://code.delx.au/transcoding/commitdiff_plain/793449c64e1dc3fa6daf354af76a41c77892c587 Added --fixmux option that copies input streams to an AVI before transcoding --- diff --git a/encode.py b/encode.py index 6e526fd..a151930 100755 --- a/encode.py +++ b/encode.py @@ -1,5 +1,6 @@ #!/usr/bin/env python +from functools import partial import optparse import re import subprocess @@ -43,6 +44,10 @@ def midentify(source, field): if key == field: return value.strip() +def append_cmd(cmd, opt, var): + if var is not None: + cmd.append(opt) + cmd.append(str(var)) class Command(object): @@ -130,10 +135,39 @@ class MKVMerge(Command): +class MencoderFixRemux(Command): + def init(self): + orig = self.opts + self.opts = optparse.Values(orig.__dict__) + orig.input = "remux.avi" + orig.dvd = orig.chapter = orig.startpos = orig.endpos = None + + def check(self): + self.check_command("mencoder") + self.check_no_file("remux.avi") + + def run(self): + o = self.opts + cmd = [ + "mencoder", + "-o", "remux.avi", + "-oac", "copy", "-ovc", "copy", + "-mc", "0.1", + o.input, + ] + do_opt = partial(append_cmd, cmd) + do_opt("-dvd-device", o.dvd) + do_opt("-chapter", o.chapter) + do_opt("-ss", o.startpos) + do_opt("-endpos", o.endpos) + self.do_exec(cmd) + + + class MencoderMux(Command): def check(self): self.check_command("mencoder") - self.check_no_file(self.opts.output + ".avi") + self.check_no_file(self.opts.output + ".tmp.avi") def run(self): self.do_exec([ @@ -170,10 +204,7 @@ class Mencoder(Command): def insert_options(self, cmd): o = self.opts - def do_opt(opt, var): - if var is not None: - cmd.append(opt) - cmd.append(str(var)) + do_opt = partial(append_cmd, cmd) if o.deinterlace: cmd += ["-vf-add", "yadif"] @@ -342,6 +373,7 @@ def parse_args(): parser.add_option("--dvd", action="store", dest="dvd") parser.add_option("--deinterlace", action="store_true", dest="deinterlace") parser.add_option("--detelecine", action="store_true", dest="detelecine") + parser.add_option("--fixmux", action="store_true", dest="fixmux") parser.add_option("--copyac3", action="store_true", dest="copyac3") parser.add_option("--mc", action="store", dest="mc", type="int") parser.add_option("--noskip", action="store_true", dest="noskip") @@ -407,6 +439,8 @@ def main(): try: commands = [] + if opts.fixmux: + profile.commands.insert(0, MencoderFixRemux) for CommandClass in profile.commands: command = CommandClass(profile, opts) commands.append(command)