summaryrefslogtreecommitdiff
path: root/localvideowebencode
diff options
context:
space:
mode:
authorJonas Smedegaard <dr@jones.dk>2014-09-24 22:33:48 +0200
committerJonas Smedegaard <dr@jones.dk>2014-09-24 22:33:48 +0200
commitdb1696b55cf4e308877b1938157194e2b570f89a (patch)
treecf0785c9d364b2bbf02b7c74c7dc44d2b88de756 /localvideowebencode
parent591b1856f08665ad1363dc66cc6a69c231235e86 (diff)
Add vp9 format, enabled by default.
Diffstat (limited to 'localvideowebencode')
-rwxr-xr-xlocalvideowebencode32
1 files changed, 23 insertions, 9 deletions
diff --git a/localvideowebencode b/localvideowebencode
index 98843e6..12f7ce2 100755
--- a/localvideowebencode
+++ b/localvideowebencode
@@ -64,8 +64,9 @@ html favoring open formats with optional non-JavaScript Flash fallback.
container video codec audio codec
ogg Ogg Theora Vorbis
webm WebM VP8 Vorbis
+ vp9 WebM VP9 Opus
mp4 MPEG-4 H.264 AAC
- (default: webm,mp4)
+ (default: webm,vp9,mp4)
--audio Audio style:
channels limit
music max 2
@@ -120,7 +121,7 @@ exit1() {
}
# defaults
-formats=webm,mp4
+formats=webm,vp9,mp4
samplestart=0
samplelength=150
@@ -274,6 +275,7 @@ for format in $(echo "$formats" | sed -e 's/,/ /g'); do
ogg) ogg=yes;;
mp4) mp4=yes;;
webm) webm=yes;;
+ vp9) vp9=yes;;
*) exit1 "Unknown format \"$format\".";;
esac
done
@@ -298,10 +300,12 @@ fi
if [ -z "$bitrate" ] && [ -n "$_pixels" ] && [ -n "$_frames" ]; then
bitrate=$(perl -E '$refsize=640*360;' \
-E "say int( +(($_pixels/\$refsize)**0.75*\$refsize*$_frames*$refbpp) )")
+ bitrate_half=$(perl -E "say int( $bitrate/2 )") #"
fi
# default per-codec-channel bitrates
bitrate_vorbis=64
+bitrate_opus=64
bitrate_aac=96
case "$audio" in
@@ -311,11 +315,13 @@ case "$audio" in
hqspeech)
channels=1
bitrate_vorbis=48
+ bitrate_opus=32
bitrate_aac=64
;;
speech)
channels=1
bitrate_vorbis=48
+ bitrate_opus=32
bitrate_aac=64
compress=yes
[ -z "$melt_recent" ] || _melt_loudness="$loudness_results"
@@ -337,14 +343,17 @@ esac
# TODO: When verified beneficial, add option real_time=-2
melt="melt -progress"
_melt_in="${_melt_in:+$_melt_in }${sample:+in=${samplestart:-0} out=$((${samplestart:-0} + samplelength))}"
-_melt_video="progressive=1${framerate:+ frame_rate_den="$framerate_den" frame_rate_num="$framerate_num"}${bitrate:+ vb=$bitrate}${size:+ s=${width:+$width}x${height:+$height}}${aspect:+ aspect=$aspect}"
-_melt_ogg="$_melt_video f=ogg vcodec=libtheora${bitrate_fixed:- qscale=5}"
-_melt_h264="$_melt_video f=mp4 vcodec=libx264 threads=0 movflags=+faststart vpre=baseline${x264tune:+ tune=$x264tune}${bitrate_fixed:- crf=23}"
-_melt_webm="$_melt_video f=webm vcodec=libvpx vpre=libvpx-$webmpreset${bitrate_fixed:- crf=10}"
+_melt_video="progressive=1${framerate:+ frame_rate_den="$framerate_den" frame_rate_num="$framerate_num"}${size:+ s=${width:+$width}x${height:+$height}}${aspect:+ aspect=$aspect}"
+_melt_ogg="$_melt_video f=ogg vcodec=libtheora${bitrate:+ vb=$bitrate}${bitrate_fixed:- qscale=5}"
+_melt_h264="$_melt_video f=mp4 vcodec=libx264${bitrate:+ vb=$bitrate} threads=0 movflags=+faststart vpre=baseline${x264tune:+ tune=$x264tune}${bitrate_fixed:- crf=23}"
+_melt_webm="$_melt_video f=webm vcodec=libvpx${bitrate:+ vb=$bitrate} vpre=libvpx-$webmpreset${bitrate_fixed:- crf=10}"
+# CRF ignored with libvpx 1.3
+_melt_vp9="$_melt_video f=webm vcodec=libvpx-vp9${bitrate:+ vb=$bitrate_half} vpre=libvpx-$webmpreset${bitrate_fixed:- crf=10}"
_melt_audio="${channels:+ac=$channels}"
# limit (i.e. avoid peaks "clipping")
_melt_postfilters_audio="${limit:+-filter ladspa.1077}"
_melt_vorbis="$_melt_audio acodec=libvorbis ab=$(($channels*$bitrate_vorbis))k"
+_melt_opus="$_melt_audio acodec=libopus ab=$(($channels*$bitrate_opus))k"
_melt_aac="$_melt_audio acodec=aac ab=$(($channels*$bitrate_aac))k"
# resolve EBU R128 audio normalizing
@@ -365,7 +374,8 @@ $melt -group $_melt_in $infiles \
$filters${channels:+ $_melt_postfilters_audio} \
${ogg:+-consumer avformat:$stem.ogv $_melt_ogg $_melt_vorbis $_melt_out} \
${mp4:+-consumer avformat:$stem.mp4 ${bitrate_fixed:+pass=2} $_melt_h264 $_melt_aac $_melt_out} \
- ${webm:+-consumer avformat:$stem.webm $_melt_webm $_melt_vorbis $_melt_out}
+ ${webm:+-consumer avformat:$stem.webm $_melt_webm $_melt_vorbis $_melt_out} \
+ ${vp9:+-consumer avformat:${stem}_vp9.webm $_melt_vp9 $_melt_opus $_melt_out}
if [ -n "$mp4" ] && [ -z "$melt_recent" ]; then
mv "$stem.mp4" "$stem.mp4"~
@@ -385,6 +395,7 @@ __height="${_height:+ height=\"$_height\"}"
__heightplus=${_height:+ height=\"$(($_height+4))\"}
_source_ogg="<source src=\"$stem.ogv\" type=\"video/ogg\" />"
_source_webm="<source src=\"$stem.webm\" type=\"video/webm\" />"
+_source_vp9="<source src=\"${stem}_vp9.webm\" type='video/ogg; codecs=\"vp9, opus\"' />"
_source_mp4="<source src=\"$stem.mp4\" type=\"video/mp4\" />"
# TODO: resolve flash player to use
[ -z "$flashplayer" ] || flash=yes
@@ -393,13 +404,15 @@ _object_flash="<object$__width$__heightplus type=\"application/x-shockwave-flash
_param_name="<param name=\"movie\" value=\"$flashplayer.swf\" />"
_param_flashvars="<param name=\"flashvars\" value=\"image=$stem.jpg&amp;file=$stem.mp4\" />"
__oggfile=${ogg:+open format <a href=\"$stem.ogv\">Ogg</a>}
-__webmfile=${webm:+open format <a href=\"$stem.webm\">WebM</a>}
+__webmfile=${webm:+open format <a href=\"$stem.webm\">WebM (VP8)</a>}
+__vp9file=${vp9:+open format <a href=\"${stem}_vp9.webm\">WebM (VP9/Opus)</a>}
__mp4file=${mp4:+closed format <a href=\"$stem.mp4\">MPEG-4</a>}
cat >"$stem.html" <<EOF
<!-- Video for Everybody, Kroc Camen of Camen Design -->
<video$__width$__height preload controls>
${mp4:+$_source_mp4
+}${vp9:+$_source_vp9
}${webm:+$_source_webm
}${ogg:+$_source_ogg
}${flash:+$_object_flash
@@ -410,7 +423,8 @@ $_param_flashvars
${flash:+</object>
}</video>
<p><strong>Download Video:</strong><ul>
-${webm:+<li>$__webmfile
+${vp9:+<li>$__vp9file
+}${webm:+<li>$__webmfile
}${ogg:+<li>$__oggfile
}${mp4:+<li>$__mp4file
}</ul></p>