#!/bin/bash # Determine the bitrate of a media file, playing it to wav to determine its length. # # mplayer's AUDIO lines look like this: # AUDIO: 44100 Hz, 2 ch, s16le, 128.0 kbit/9.07% (ratio: 16000->176400) for file; do { ls -l "$file" | awk '{ print "FILESIZE:",$5 }' 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); } /^FILESIZE: [0-9]+/ { filesize=$2 } /^WAVESIZE: [0-9]+/ { wavesize=$2 } END { OFMT="%f" print filesize * rate * channels * bitspersample / wavesize }' echo "$file"; } | paste - - done