]> git.sesse.net Git - ffmpeg/blob - tools/normalize.py
Merge commit 'f126365cdad6327e6def8ceb918eaf538fbb97b3'
[ffmpeg] / tools / normalize.py
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)