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