Blame view

ffmpeg-4.2.2/tools/normalize.py 1018 Bytes
aac5773f   hucm   功能基本完成,接口待打磨
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
  #!/usr/bin/env python2
  
  import sys, subprocess
  
  if len(sys.argv) > 2:
      ifile  = sys.argv[1]
      encopt = sys.argv[2:-1]
      ofile  = sys.argv[-1]
  else:
      print 'usage: %s <input> [encode_options] <output>' % sys.argv[0]
      sys.exit(1)
  
  analysis_cmd  = 'ffprobe -v error -of compact=p=0:nk=1 '
  analysis_cmd += '-show_entries frame_tags=lavfi.r128.I -f lavfi '
  analysis_cmd += "amovie='%s',ebur128=metadata=1" % ifile
  try:
      probe_out = subprocess.check_output(analysis_cmd, shell=True)
  except subprocess.CalledProcessError, e:
      sys.exit(e.returncode)
  loudness = ref = -23
  for line in probe_out.splitlines():
      sline = line.rstrip()
      if sline:
          loudness = sline
  adjust = ref - float(loudness)
  if abs(adjust) < 0.0001:
      print 'No normalization needed for ' + ifile
  else:
      print "Adjust %s by %.1fdB" % (ifile, adjust)
      norm_cmd  = ['ffmpeg', '-i', ifile, '-af', 'volume=%fdB' % adjust]
      norm_cmd += encopt + [ofile]
      print ' => %s' % ' '.join(norm_cmd)
      subprocess.call(norm_cmd)