#!/bin/bash # Determine the length of a media file by playing it. # # mplayer's AUDIO lines look like this: # AUDIO: 44100 Hz, 2 ch, s16le, 128.0 kbit/9.07% (ratio: 16000->176400) printrate=0 while getopts r opt;do case $opt in r) printrate=1;; esac done shift `expr $OPTIND - 1` for file; do mplayer -vo null -vc dummy -ao pcm:waveheader:file=>( wc -c |sed 's/^/WAVESIZE: /' ) "$file" &1 | { awk '/^AUDIO: [0-9]+ Hz/ { rate=$2 channels=$4; bitspersample=gensub("[^0-9]","","g",$6); } /^WAVESIZE: [0-9]+/ { wavesize=$2 } END { OFMT="%f" if ('"$printrate"') { printf "%s ", rate } print 8 * wavesize / ( rate * channels * bitspersample ) }' echo "$file"; } | paste - - done