# If doing -fast identification, skip "accurate" length determination if $FAST; then : else # make a nav_log: can be reused, especially by todisc for fast seeking if hash tcdemux 2>/dev/null; then # use tcdemux if present if [[ ! -e "$INFILE".nav_log ]]; then # only do if no log yet if [[ ${INFILE##*.} =~ [MmPpGg] ]]; then # test for *.mpg ext NUM_FRAMES=$(LC_ALL=C tcdemux -i "$INFILE" -W "$INFILE" 2>&1 | tee "$INFILE".nav_log | awk '{ field = $2 }; END{ print field }') fi else # use existing nav_log echo "nav_log exists, using ${INFILE}.nav_log" echo "If you don't want to use this file please delete it" NUM_FRAMES=$(awk '{ field = $2 }; END{ print field }' < "${INFILE}".nav_log) fi V_DUR=$(bc <<< "$NUM_FRAMES / $ID_VIDEO_FPS") V_DURATION=${V_DUR%%.*} # final value is integer ( seconds ) else # Determine duration by playing the video into /dev/null and doing # tons of filtering. Time consuming, but presumably more accurate. V_DURATION=$(LC_ALL=C mencoder -ovc frameno -oac pcm -noskiplimit \ "$INFILE" -o /dev/null 2>/dev/null | tr '\r' '\n' | grep ^Pos: | \ tail -n 1 | sed s/^.*Pos:// | awk '{print $1}' | sed s/[.][0-9]s//) fi fi