]> code.delx.au - transcoding/blob - toh264.py
fc5ab1c4ad5f2c99ebf07a7e0680f73f2fb3878c
[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 "-ffourcc", "DX50",
8 "-vf", "%(filters)s",
9 "-ovc", "x264", "-x264encopts", "pass=%(pass)d:turbo:bitrate=%(vbitrate)d:bframes=0:me=umh:partitions=all:trellis=1:qp_step=4:qcomp=0.7:direct_pred=auto:keyint=300",
10 "-oac", "faac", "-faacopts", "br=%(abitrate)d:mpeg=4:object=2", "-channels", "2", "-srate", "48000",
11 ]
12
13 parser = optparse.OptionParser(usage="%prog [options] input output")
14 parser.add_option("--dvd", action="store", dest="dvd")
15 parser.add_option("--filters", action="store", dest="filters", default="denoise3d")
16 parser.add_option("--vbitrate", action="store", dest="vbitrate", type="int", default=600)
17 parser.add_option("--abitrate", action="store", dest="abitrate", type="int", default=192)
18 parser.add_option("--dump", action="store_true", dest="dump")
19 try:
20 opts, (input, output) = parser.parse_args(sys.argv[1:])
21 except:
22 parser.print_usage()
23 sys.exit(1)
24
25 # Start/stop time?
26 # Custom dvd device?
27 if opts.dvd:
28 cmd.insert(1, opts.dvd)
29 cmd.insert(1, "-dvd-device")
30
31 # Default options
32 subst = {
33 "vbitrate": opts.vbitrate,
34 "abitrate": opts.abitrate,
35 "filters": opts.filters,
36 "input": input,
37 }
38
39 def run(args):
40 if opts.dump:
41 print " ".join(args)
42 else:
43 subprocess.Popen(args).wait()
44
45 # Pass 1
46 subst["pass"] = 1
47 subst["output"] = "/dev/null"
48 run([x % subst for x in cmd])
49
50 # Pass 2
51 subst["pass"] = 2
52 subst["output"] = output
53 run([x % subst for x in cmd])
54