diff options
author | Marton Balint <cus@passwd.hu> | 2016-10-23 23:36:37 +0200 |
---|---|---|
committer | Marton Balint <cus@passwd.hu> | 2016-11-11 19:22:52 +0100 |
commit | 7b8445f03d10faf7ed232e6201bf04ba73d980d7 (patch) | |
tree | 8421e7745af1c95b6df2db90132277182a380bdb | |
parent | 872b35890395878ca927e226965117482429fceb (diff) | |
download | ffmpeg-7b8445f03d10faf7ed232e6201bf04ba73d980d7.tar.gz |
tools: add loudnorm script example to use loudnorm
Based on a patch by Kyle Swanson <k@ylo.ph>.
Signed-off-by: Marton Balint <cus@passwd.hu>
-rwxr-xr-x | tools/loudnorm.rb | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/tools/loudnorm.rb b/tools/loudnorm.rb new file mode 100755 index 0000000000..4ad374a247 --- /dev/null +++ b/tools/loudnorm.rb @@ -0,0 +1,61 @@ +#!/usr/bin/env ruby + +require 'open3' +require 'json' + +ffmpeg_bin = 'ffmpeg' +target_il = -24.0 +target_lra = +11.0 +target_tp = -2.0 +samplerate = '48k' + +if ARGF.argv.count != 2 + puts "Usage: #{$PROGRAM_NAME} input.wav output.wav" + exit 1 +end + +ff_cmd = Array.new([ + ffmpeg_bin, + '-hide_banner', + '-i', ARGF.argv[0], + '-af', "loudnorm='I=#{target_il}:LRA=#{target_lra}:tp=#{target_tp}:print_format=json'", + '-f', 'null', + '-']); + +_stdin, _stdout, stderr, wait_thr = Open3.popen3(*ff_cmd) + +if wait_thr.value.success? + stats = JSON.parse(stderr.read.lines[-12, 12].join) + loudnorm_string = 'loudnorm=' + loudnorm_string += 'print_format=summary:' + loudnorm_string += 'linear=true:' + loudnorm_string += "I=#{target_il}:" + loudnorm_string += "LRA=#{target_lra}:" + loudnorm_string += "tp=#{target_tp}:" + loudnorm_string += "measured_I=#{stats['input_i']}:" + loudnorm_string += "measured_LRA=#{stats['input_lra']}:" + loudnorm_string += "measured_tp=#{stats['input_tp']}:" + loudnorm_string += "measured_thresh=#{stats['input_thresh']}:" + loudnorm_string += "offset=#{stats['target_offset']}" +else + puts stderr.read + exit 1 +end + +ff_cmd = Array.new([ + ffmpeg_bin, + '-y', '-hide_banner', + '-i', ARGF.argv[0], + '-af', loudnorm_string, + '-ar', samplerate, + ARGF.argv[1].to_s]); + +_stdin, _stdout, stderr, wait_thr = Open3.popen3(*ff_cmd) + +if wait_thr.value.success? + puts stderr.read.lines[-12, 12].join + exit 0 +else + puts stderr.read + exit 1 +end |