#!/bin/bash # This script written by an anonymous author # Original page http://www.knoppmythwiki.org/index.php?page=HardwareAcceleratedVideo # # It's modded to allow vdpau switches commands to pass to a modded version of Bob Igo's # mplayer-resumer.pl wrapper for mplayer # # User can customize commandline for mplayer by editing the appropriate sections below # They include BASIC_OPTS, NOHD_OPTS, and LOW_OPTS 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" # For a complete list of options, see the mplayer DOCS # http://www.mplayerhq.hu/DOCS/man/en/mplayer.1.html # # Options for all videos: fullscreen, zoom, and use software eq BASIC_OPTS="-fs -zoom" # Options for non-HD videos: force aspect to 16x10 (to ensure video fills TV screen) # You'll need to modify the ratio if your res differs # Example: 1920x1080 = 1.778 = 16:9 # Example: 1680x1050 = 1.600 = 16:10 # Example: 1280x720 = 1.778 = 16:9 NOHD_OPTS="-aspect 16:10" # Options for normal and lowres videos: use XV forcing 16x10 LOW_OPTS="-aspect 16:10 -vo xv" VWIDTH=$($MPLAYER -identify -vo vdpau -frames 0 "$FILE" | grep ID_VIDEO_WIDTH | cut -c 16-25) VCODEC=$($MPLAYER -identify -vo vdpau -frames 0 "$FILE" | grep ID_VIDEO_CODEC | cut -c 16-25) # all following echo commands can be uncommented for debug info #echo . #echo " DEBUG info: video codec: $VCODEC" #echo " DEBUG info: video width: $VWIDTH" #echo " Debug info: # Test for codec, if it's supported by VDPAU, set options to use it. Then, check if the video is in HD, # and if it's not, set non-HD options. case $VCODEC in ffh264) #echo -e "Playing h.264 file $FILE:\n" MPLAYEROPTS="$BASIC_OPTS -vo vdpau -vc ffh264vdpau" if [ $VWIDTH -lt 1280 ] && [ $VWIDTH != 0 ]; then MPLAYEROPTS="$MPLAYEROPTS $NOHD_OPTS" fi if [ $VWIDTH -lt 700 ] && [ $VWIDTH != 0 ]; then MPLAYEROPTS="$BASIC_OPTS $LOW_OPTS" fi ;; ffmpeg2) #echo -e "Playing MPEG2 file $FILE:\n" MPLAYEROPTS="$BASIC_OPTS -vo vdpau -vc ffmpeg12vdpau" if [ $VWIDTH -lt 1280 ] && [ $VWIDTH != 0 ]; then MPLAYEROPTS="$MPLAYEROPTS $NOHD_OPTS" fi if [ $VWIDTH -lt 700 ] && [ $VWIDTH != 0 ]; then MPLAYEROPTS="$BASIC_OPTS $LOW_OPTS" fi ;; ffwmv3) #echo -e "Playing WMV3 file $FILE:\n" MPLAYEROPTS="$BASIC_OPTS -vo vdpau -vc ffwmv3vdpau" if [ $VWIDTH -lt 1280 ] && [ $VWIDTH != 0 ]; then MPLAYEROPTS="$MPLAYEROPTS $NOHD_OPTS" fi if [ $VWIDTH -lt 700 ] && [ $VWIDTH != 0 ]; then MPLAYEROPTS="$BASIC_OPTS $LOW_OPTS" fi ;; # 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="$BASIC_OPTS -vo vdpau -vc ffvc1vdpau" if [ $VWIDTH -lt 1280 ] && [ $VWIDTH != 0 ]; then MPLAYEROPTS="$MPLAYEROPTS $NOHD_OPTS" fi if [ $VWIDTH -lt 700 ] && [ $VWIDTH != 0 ]; then MPLAYEROPTS="$BASIC_OPTS $LOW_OPTS" fi ;; *) #echo -e "Playing normal file $FILE:\n" # Use XV and yadif filter with 'normal' (DiVX, XViD, old WMV, etc.) files, and force 16:9 # -vf filters only seem to work with XV, or at least they don't work w/VDPAU MPLAYEROPTS="$BASIC_OPTS $LOW_OPTS" ;; esac echo $MPLAYEROPTS