PDA

View Full Version : Mplayer VDPAU auto codec selection script


bal_zac
12-24-2008, 05:41 AM
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.


#!/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

Kano
12-24-2008, 07:54 AM
Isn't it simpler to use the xine-vdpau solution?

bal_zac
12-24-2008, 05:40 PM
Yes, it is probably simpler, but from what I can gather, the xine solution is much less stable at the moment, although I havent actually tried xine yet.

deanjo
12-24-2008, 08:27 PM
Isn't it simpler to use the xine-vdpau solution?

xine-vdpau still doesn't support containers that are commonly used for HD (mkv,mov), mplayer already does. xine-vdpau is focusing first on the vdr stream playback part of things first

iapitus
12-31-2008, 01:31 PM
I made a few minor changes to the script above, largely getting rid of the /tmp/ bits.
iapitus


#!/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

Kano
12-31-2008, 01:49 PM
You can always use -vo vdpau, also you can use

case $VCODEC in
ffh264|ffwmv3|ffmpeg12)
VCODEC=${VCODEC}vdpau
;;
esac

and then just execute - in that case you can add even more options.

$MPLAYER -vo vdpau -vc $VCODEC "$@"

ashwb
01-07-2009, 12:58 PM
Why not just put a list of the video outputs and codecs you want to try in your ~/.mplayer/config file? As in:

# default to using vdpau output and codecs

# add ffvc1vdpau if your hardware supports it

# the trailing comma in each setting tells mplayer to
# fall back to standard codecs if necessary
vo=vdpau,xv,
vc=ffh264vdpau,ffmpeg12vdpau,