annotate ffmpeg/tools/normalize.py @ 13:844d341cf643 tip

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