+class FatalException(Exception):
+ pass
+
+class Command(object):
+ def __init__(self, profile, opts):
+ self.profile = profile
+ self.opts = opts
+
+ def print_install_message(self):
+ print >>sys.stderr, "Problem with command: %s", self.name
+ if self.package:
+ print >>sys.stderr, "Try running:\n# aptitude install %s", self.package
+
+ def check_command(self, cmd):
+ if self.opts.dump:
+ return
+ if subprocess.Popen(["which", cmd], stdout=open("/dev/null", "w")).wait() != 0:
+ raise FatalException("Command '%s' is required" % cmd)
+
+ def do_exec(self, args):
+ if self.opts.dump:
+ print "".join(map(commands.mkarg, args))[1:]
+ else:
+ if subprocess.Popen(args).wait() != 0:
+ raise FatalException("Failure executing command: %s" % args)
+
+
+class MP4Box(Command):
+ codec2exts = {
+ "xvid": "m4v",
+ "x264": "h264",
+ "faac": "aac",
+ }
+
+ def check(self):
+ self.check_command("mencoder")
+ self.check_command("MP4Box")
+
+ def run(self):
+ p = self.profile
+ video = "video.%s" % self.codec2exts[p.vcodec]
+ audio = "audio.%s" % self.codec2exts[p.acodec]
+ input = self.opts.output + ".avi" # From Mencoder command
+ output = self.opts.output + ".mp4"
+ mencoder = ["mencoder", input, "-ovc", "copy", "-oac", "copy", "-of"]
+ self.do_exec(["rm", "-f", output])
+ self.do_exec(mencoder + ["rawvideo", "-o", video])
+ self.do_exec(mencoder + ["rawaudio", "-o", audio])
+ self.do_exec(["MP4Box", "-add", video, "-add", audio, output])
+ self.do_exec(["rm", "-f", video, audio, input])
+
+
+class Mencoder(Command):