Mercurial > hg > pmhd
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) |