tc-video-generic: audio bitrate is now fully dynamic!

master
Pierre Neidhardt 2013-10-24 17:01:44 +02:00
parent bbfcc7633d
commit f677bbf5ce
1 changed files with 6 additions and 6 deletions

View File

@ -137,13 +137,12 @@ _audiobitrate()
## default value.
## AWK note: in "(bitrate+0 > 500)", the +0 is required to make sure bitrate is numeric.
if [ -n "$(command -v mediainfo)" ]; then
mediainfo "$1" | awk -v codec="$AUDIO_CODEC" -v bitrate="$AUDIO_DEFAULT_RATE" 'BEGIN {id=0} /^Audio/ { getline; while(getline && ! index($0,"Bit rate ")); if($4) printf "-c:a:" id " " codec " -b:a:" id " " $4 "k " ; else if (bitrate > 0) printf "-c:a:" id " " codec " -b:a:" id " " bitrate "k "; else printf "-c:a:" id " copy "; id++} END {print ""}'
if [ ! -n "$(command -v mediainfo)" ]; then
mediainfo "$1" | awk 'BEGIN {id=0} /^Audio/ { getline; while(getline && ! index($0,"Bit rate ")); if($4) res=$4; else res=0; print id, res; id++}'
else
ffmpeg -i "$1" 2>&1 </dev/null | awk -v codec="$AUDIO_CODEC" -v bitrate="$AUDIO_DEFAULT_RATE" 'BEGIN {id=0} /^ *Stream.*Audio/ {match($0, / [^ ]+ kb\/s/); res=substr($0, RSTART+1, RLENGTH-6); if(res || bitrate) {if(res) bitrate=res; if(bitrate+0 > 500) bitrate=500; printf "-c:a:" id " " codec " -b:a:" id " " bitrate "k "} else printf "-c:a:" id " copy "; id++} END {print ""}'
fi
## TODO: use 2 awk calls.
ffmpeg -i "$1" 2>&1 </dev/null | awk 'BEGIN {id=0} /^ *Stream.*Audio/ {match($0, / [^ ]+ kb\/s/); res=substr($0, RSTART+1, RLENGTH-6); print id, res; id++}'
fi | awk -v codec="$AUDIO_CODEC" -v bitrate="$AUDIO_DEFAULT_RATE" \
'{if($2 || bitrate) {if($2) bitrate=$2; if(bitrate+0 > 500) bitrate=500; printf "-c:a:" $1 " " codec " -b:a:" $1 " " bitrate "k "} else printf "-c:a:" $1 " copy "} END {print ""}'
}
_tc_transcode()
@ -172,6 +171,7 @@ _tc_transcode()
## the case when converting DTS to any other format because DTS has
## embedded channel description which is not available in these formats.
# AUDIO_FILTER="-ac 2"
AUDIO_PARAM="$(_audiobitrate "$1") -ac 2"
fi