]> code.delx.au - transcoding/blob - toh264.py
Don't use the turbo option
[transcoding] / toh264.py
1 #!/usr/bin/env python
2
3 import optparse, subprocess, sys
4
5 cmd = [
6 "mencoder", "%(input)s", "-o", "%(output)s",
7 "-vf", "%(filters)s",
8 "-ovc", "x264", "-x264encopts", "pass=%(pass)d:bitrate=%(vbitrate)d:me=umh:partitions=all:trellis=1",
9 "-oac", "faac", "-faacopts", "br=%(abitrate)d:mpeg=4:object=2", "-channels", "2", "-srate", "48000",
10 ]
11
12
13 def parseArgs():
14 parser = optparse.OptionParser(usage="%prog [options] input output")
15 parser.add_option("--dvd", action="store", dest="dvd")
16 parser.add_option("--filters", action="store", dest="filters", default="denoise3d")
17 parser.add_option("--vbitrate", action="store", dest="vbitrate", type="int", default=600)
18 parser.add_option("--abitrate", action="store", dest="abitrate", type="int", default=192)
19 parser.add_option("--startpos", action="store", dest="startpos")
20 parser.add_option("--endpos", action="store", dest="endpos")
21 parser.add_option("--dump", action="store_true", dest="dump")
22 try:
23 opts, (input, output) = parser.parse_args(sys.argv[1:])
24 except:
25 parser.print_usage()
26 sys.exit(1)
27
28 return opts, input, output
29
30 def insertOpt(opt, var):
31 if var:
32 cmd.insert(1, var)
33 cmd.insert(1, opt)
34
35 def run(args, dump):
36 if dump:
37 print " ".join(args)
38 else:
39 subprocess.Popen(args).wait()
40
41 def main():
42 opts, input, output = parseArgs()
43
44 insertOpt("-ss", opts.startpos)
45 insertOpt("-endpos", opts.endpos)
46 insertOpt("-dvd-device", opts.dvd)
47
48 subst = {
49 "vbitrate": opts.vbitrate,
50 "abitrate": opts.abitrate,
51 "filters": opts.filters,
52 "input": input,
53 }
54
55 # Pass 1
56 subst["pass"] = 1
57 subst["output"] = "/dev/null"
58 run([x % subst for x in cmd], opts.dump)
59
60 # Pass 2
61 subst["pass"] = 2
62 subst["output"] = output
63 run([x % subst for x in cmd], opts.dump)
64
65 if __name__ == "__main__":
66 main()
67