All pastes #613217 Raw Edit

Stuff

public text v1 · immutable
·published 2007-07-10 21:25 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 -n $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,12 @@
             else
                 MP_TRACKNUM=$i
             fi
+            # last ditch effort to get audio bitrate if we still don't have it
+            if test ${A_BITRATES[i]} -eq 0; then
+                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
             A_HEX_TRACKS=("${A_HEX_TRACKS[@]}" "$MP_TRACKNUM")
         done
 
@@ -340,6 +351,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)