Index: idvid =================================================================== --- idvid (revision 2161) +++ idvid (working copy) @@ -215,7 +215,10 @@ TOTAL_AV_BITRATE=$(awk -F: '{gsub("kb/s", "")}; /bitrate:/ {print $6*1000}' "$SCRATCH_FILE") ## take the lower of the two if test $ID_VIDEO_BITRATE -eq 0 || test $TOTAL_AV_BITRATE -lt $ID_VIDEO_BITRATE; then - ID_VIDEO_BITRATE=$TOTAL_AV_BITRATE + # make sure we have a value from ffmpeg + if test_is_number $TOTAL_AV_BITRATE; then + ID_VIDEO_BITRATE=$TOTAL_AV_BITRATE + fi else ID_VIDEO_BITRATE=$ID_VIDEO_BITRATE fi @@ -241,6 +244,8 @@ sed -r 's/.* ([0-9]+) Hz.*/\1/')") A_BITRATES=("${A_BITRATES[@]}" "$(echo $CUR_CHAN | \ sed -r 's/.* ([0-9]+) kb\/s.*/\1/')") + # make sure the above is a number, else set A_BITRATE to 0 + ! test_is_number ${A_BITRATES[i]} && A_BITRATES[i]=0 A_CODECS=("${A_CODECS[@]}" "$(echo $CUR_CHAN | \ sed -r 's/.*Audio: ([^,]+),.*/\1/')") if $USE_HEX_TRACKS; then @@ -248,6 +253,20 @@ else MP_TRACKNUM=$i fi + # last ditch efforts to get audio bitrate if we still don't have it + if test ${A_BITRATES[i]} -eq 0; then + MP_ABITRATE=$(mplayer -vo null -ao null -frames 90 -channels 6 -identify \ + -aid $MP_TRACKNUM "$INFILE" 2>&1 | + grep ID_AUDIO_BITRATE|awk -F= 'END{print $2}') + if test_is_number $MP_ABITRATE; then + MP_ABITRATE=${MP_ABITRATE%.*} + A_BITRATES[i]=${MP_ABITRATE/000*} + else # final attempt + MENC_ABITRATE=$(mencoder "$INFILE" -aid $MP_TRACKNUM -oac pcm -ovc copy \ + -frames 90 -o /dev/null 2>&1 | awk '/AUDIO/ {print $7}') + test_is_number $MENC_ABITRATE && A_BITRATES[i]=${MENC_ABITRATE%.*} + fi + fi A_HEX_TRACKS=("${A_HEX_TRACKS[@]}" "$MP_TRACKNUM") done @@ -282,7 +301,7 @@ # Infer aspect ratio from width/height of mplayer playback MPLAYER_RES=$(grep '^VO:' "$SCRATCH_FILE" | \ sed -e "s/..*=> *//g" -e "s/ .*$//g") - #PLAY_WIDTH=$(echo $MPLAYER_RES | awk -F 'x' '{print $1}') + #PLAY_WIDTH=$(echo $tMPLAYER_RES | awk -F 'x' '{print $1}') #PLAY_HEIGHT=$(echo $MPLAYER_RES | awk -F 'x' '{print $2}') # patch from ML: PLAY_WIDTH=$(echo "$MPLAYER_RES" | awk -F '[x ]' 'BEGIN {wid = 0}; {if ($1 > wid) wid = $1}; END {print wid}') @@ -340,6 +359,14 @@ V_DURATION=${V_DURATION%%.*} # integer in seconds # overwrite ID_VIDEO_FRAMES since we have a more accurate count now ID_VIDEO_FRAMES=$(awk 'END{print $(NF-1)}' <<< "$MENCODER_STATS") + # if we failed to get a video bitrate earlier, use mencoder stats + if test $ID_VIDEO_BITRATE -eq 0; then + MENCODER_STATS_BR=$(awk -F: 'END{print $2}' <<< "$MENCODER_STATS" | awk '{print $1}') + # make sure it is a number + if test_is_number $MENCODER_STATS_BR; then + ID_VIDEO_BITRATE=${MENCODER_STATS_BR%.*}000 + fi + fi $VERBOSE && echo "$MENCODER_STATS" elif $USE_NAVLOG; then ID_VIDEO_FRAMES=$(awk '{ field = $2 }; END{ print field }' < "${INFILE}".nav_log)