yading@11: #!/usr/bin/env python2 yading@11: yading@11: import sys, subprocess yading@11: yading@11: if len(sys.argv) > 1: yading@11: ifile = sys.argv[1] yading@11: encopt = sys.argv[2:-1] yading@11: ofile = sys.argv[-1] yading@11: else: yading@11: print 'usage: %s [encode_options] ' % sys.argv[0] yading@11: sys.exit(1) yading@11: yading@11: analysis_cmd = 'ffprobe -v error -of compact=p=0:nk=1 ' yading@11: analysis_cmd += '-show_entries frame_tags=lavfi.r128.I -f lavfi ' yading@11: analysis_cmd += "amovie='%s',ebur128=metadata=1" % ifile yading@11: try: yading@11: probe_out = subprocess.check_output(analysis_cmd, shell=True) yading@11: except subprocess.CalledProcessError, e: yading@11: sys.exit(e.returncode) yading@11: loudness = ref = -23 yading@11: for line in probe_out.splitlines(): yading@11: sline = line.rstrip() yading@11: if sline: yading@11: loudness = sline yading@11: adjust = ref - float(loudness) yading@11: if abs(adjust) < 0.0001: yading@11: print 'No normalization needed for ' + ifile yading@11: else: yading@11: print "Adjust %s by %.1fdB" % (ifile, adjust) yading@11: norm_cmd = ['ffmpeg', '-i', ifile, '-af', 'volume=%fdB' % adjust] yading@11: norm_cmd += encopt + [ofile] yading@11: print ' => %s' % ' '.join(norm_cmd) yading@11: subprocess.call(norm_cmd)