Commit | Line | Data |
---|---|---|
2ba45a60 DM |
1 | #!/usr/bin/env python2 |
2 | ||
3 | import sys, subprocess | |
4 | ||
5 | if len(sys.argv) > 2: | |
6 | ifile = sys.argv[1] | |
7 | encopt = sys.argv[2:-1] | |
8 | ofile = sys.argv[-1] | |
9 | else: | |
10 | print 'usage: %s <input> [encode_options] <output>' % sys.argv[0] | |
11 | sys.exit(1) | |
12 | ||
13 | analysis_cmd = 'ffprobe -v error -of compact=p=0:nk=1 ' | |
14 | analysis_cmd += '-show_entries frame_tags=lavfi.r128.I -f lavfi ' | |
15 | analysis_cmd += "amovie='%s',ebur128=metadata=1" % ifile | |
16 | try: | |
17 | probe_out = subprocess.check_output(analysis_cmd, shell=True) | |
18 | except subprocess.CalledProcessError, e: | |
19 | sys.exit(e.returncode) | |
20 | loudness = ref = -23 | |
21 | for line in probe_out.splitlines(): | |
22 | sline = line.rstrip() | |
23 | if sline: | |
24 | loudness = sline | |
25 | adjust = ref - float(loudness) | |
26 | if abs(adjust) < 0.0001: | |
27 | print 'No normalization needed for ' + ifile | |
28 | else: | |
29 | print "Adjust %s by %.1fdB" % (ifile, adjust) | |
30 | norm_cmd = ['ffmpeg', '-i', ifile, '-af', 'volume=%fdB' % adjust] | |
31 | norm_cmd += encopt + [ofile] | |
32 | print ' => %s' % ' '.join(norm_cmd) | |
33 | subprocess.call(norm_cmd) |