blob: 070f1508f8adc351e3d0d3a508a97996eb12e9df (
plain)
- #!/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 (optional, default: 320x200)
- size=${1:-320x200}
- 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" <<EOF
- <!-- Video for Everybody, Kroc Camen of Camen Design -->
- <video width="$width" height="$height" preload controls>
- <source src="$filebase.mp4" type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"' />
- <source src="$filebase.ogv" type='video/ogg; codecs="theora, vorbis"' />
- ${webm:+<source src="$filebase.webm" type='video/webm; codecs="vp8, vorbis"' />
- }${flash:+<object width="$width" height="$heightplus" type="application/x-shockwave-flash" data="$flashplayer.swf">
- <param name="movie" value="$flashplayer.swf" />
- <param name="flashvars" value="image=$filebase.jpg&file=$filebase.mp4" />
- }<img src="$filebase.jpg" width="$width" height="$height" alt="$title"
- title="No video playback capabilities, please download the video below" />
- ${flash:+</object>
- }</video>
- <p><strong>Download Video:</strong>
- open format <a href="$filebase.ogv">Ogg</a>,
- ${webm:+open format <a href="$filebase.webm">WebM</a>,}
- closed Format <a href="$filebase.mp4">MP4</a>.
- </p>
- EOF
|