#!/bin/sh # Origins: # http://diveintohtml5.org/video.html # http://camendesign.com/code/video_for_everybody # Possible flashplayers: # http://www.internetmarketingnotes.com/2010/07/free-embeddable-flash-video-flv-players-for-commercial-use/ set -e # input filename (mandatory) infile="$1"; shift filebase=$(echo "$infile" | perl -pe 's/\.[^.]*//') # output size in WIDTHxHEIGHT (mandatory) # TODO: Make optional with input size as default # TODO: Make each half of size optional with default resolved from input aspect ratio size="$1"; shift width=$(echo "$size" | perl -pe 's/[^x]*x//') height=$(echo "$size" | perl -pe 's/x[^x]*//') heightplus=${height:+$(($height+4))} # fallback graphics title # TODO: implement --title option (set it in environment for now) title=${title:-$filebase} # TODO: Check and fail if all needed tools are not available ## Theora/Vorbis/Ogg ffmpeg2theora --videobitrate 200 --max_size "$size" --output "$filebase.ogv" "$infile" ## H.264/AAC/MP4 HandBrakeCLI --preset "iPhone & iPod Touch" --vb 200 ${width:+--maxWidth "$width"} ${height:+--maxHeight "$height"} --two-pass --turbo --optimize --input "$infile" --output "$filebase.mp4" ## VP8/Vorbis/WebM ! ffmpeg -codecs | grep -iw vp8 || webm=yes # FIXME: check and fail if logfiles exist already [ -z "$webm" ] || ffmpeg -pass 1 -passlogfile "$infile" -threads 16 -keyint_min 0 -g 250 -skip_threshold 0 -qmin 1 -qmax 51 -i "$infile" -vcodec libvpx -b 204800 -s "$size" -aspect 4:3 -an -f webm -y NUL [ -z "$webm" ] || ffmpeg -pass 2 -passlogfile "$infile" -threads 16 -keyint_min 0 -g 250 -skip_threshold 0 -qmin 1 -qmax 51 -i "$infile" -vcodec libvpx -b 204800 -s "$size" -aspect 4:3 -acodec libvorbis -ac 2 -y "$filebase.webm" rm "$infile"-*.log ## JPEG preview ffmpegthumbnailer -s0 -i "$filebase.ogv" -o "$filebase.jpg" # TODO: resolve flash player to use [ -z "$flashplayer" ] || flash=yes cat >"$filebase.html" <

Download Video: open format Ogg, ${webm:+open format WebM,} closed Format MP4.

EOF