All pastes #613334 Raw Edit

Unnamed

public text v1 · immutable
·published 2007-07-10 22:43 UTC
rendered paste body
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)