Mplayer VDPAU auto codec selection script
I recently wrote a script such that I could easily playback files easily in mythtv. It just finds out which codec the file in question is using, and launches mplayer with the correct codec. Nothing much, but I thought someone might find it useful. Just change the $mplayerlocation to wherever it is on your computer and uncomment the last if fi statement to enable vc-1.
Code:
#!/bin/bash
#Script to automatically find out which codec a file is using and determine whether or not to use VDPAU.
#if no input display usage
if [ -z "$1" ]; then
echo usage: $0 /path/to/file
exit
fi
#remember to change this to the path of your mplayer binary
mplayerlocation=/usr/local/bin/mplayer-vdpau-3263604/mplayer-vdpau
cd $mplayerlocation
#kinda a lame way to do it, but bring up mplayer and pipe the output to a temporary file, then read which codec the file is
./mplayer -identify -vo vdpau $1 > /tmp/VIDEOCODEC &
sleep 0.5
killall mplayer
videocodec=`cat /tmp/VIDEOCODEC | grep ID_VIDEO_CODEC | cut -c 16-25`
rm /tmp/VIDEOCODEC
echo "VIDEO CODEC: $videocodec"
if [ $videocodec = "ffh264" ]; then
codec='h264'
echo \n Playing $1 with $codec codec \n
./mplayer -vo vdpau -vc ffh264vdpau $1
exit
fi
if [ $videocodec = "ffmpeg2" ]; then
codec='MPEG2'
echo \n Playing $1 with $codec codec \n
./mplayer -vo vdpau -vc ffmpeg12vdpau $1
exit
fi
if [ $videocodec = "ffwmv3" ]; then
codec='WMV3'
echo \n Playing $1 with $codec codec \n
./mplayer -vo vdpau -vc ffwmv3vdpau $1
exit
fi
#VC1 is not supported on most gpus
#uncomment if it is supported on your gpu
#if [ $videocodec = "ffvc1" ]; then
# codec='VC1'
# echo \n Playing $1 with $codec codec \n
# ./mplayer -vo vdpau -vc ffvc1vdpau $1
#
# exit
#fi
#if it isnt one of those it is not supported by vdpau
#so we should play without vdpau
./mplayer $1
exit
slightly modified version
I made a few minor changes to the script above, largely getting rid of the /tmp/ bits.
iapitus
Code:
#!/bin/bash
# Script to automatically find out which codec a file is using and determine whether or not to use VDPAU.
# Rev.0 - bal_zac original - posted on phoronix
# Rev.2 - largely stylistic changes - removed need for tmp files and changed if statements to a single case statement
IAM=$0
FILE=$1
#if no input display usage
if [[ -z "$FILE" ]]; then
echo usage: $0 /path/to/file
exit
fi
MPLAYER=/usr/bin/mplayer
MPLAYEROPTS="-fs -zoom -af volnorm=2 -ao pulse"
VCODEC=$($MPLAYER -identify -vo vdpau -frames 0 "$FILE" | grep ID_VIDEO_CODEC | cut -c 16-25)
echo "VIDEO CODEC: $VCODEC"
case $VCODEC in
ffh264)
echo -e "Playing h.264 file $FILE:\n"
MPLAYEROPTS="$MPLAYEROPTS -vo vdpau -vc ffh264vdpau"
;;
ffmpeg2)
echo -e "Playing MPEG2 file $FILE:\n"
MPLAYEROPTS="$MPLAYEROPTS -vo vdpau -vc ffmpeg12vdpau"
;;
ffwmv3)
echo -e "Playing WMV3 file $FILE:\n"
MPLAYEROPTS="$MPLAYEROPTS -vo vdpau -vc ffwmv3vdpau"
;;
# VC-1 is largely unsupported by nvidia - uncomment this section if you're sure your card supports it.
#ffvc1)
# echo -e "Playing VC-1 file $FILE:\n"
# MPLAYEROPTS="$MPLAYEROPTS -vo vdpau -vc ffvc1vdpau"
#;;
*)
echo -e "Playing normal file $FILE:\n"
MPLAYEROPTS="$MPLAYEROPTS -vo xv"
;;
esac
$MPLAYER $MPLAYEROPTS $FILE