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