summaryrefslogtreecommitdiff
path: root/bin/stream
diff options
context:
space:
mode:
authorJonas Smedegaard <dr@jones.dk>2017-05-17 20:16:04 +0200
committerJonas Smedegaard <dr@jones.dk>2017-05-17 20:16:04 +0200
commitb33f2677290bbbb6588ed1abce8f97fba4ec5b0c (patch)
treef046970767226909c265b8298fd331be0f728875 /bin/stream
parentc0dd40df55cc249daf25bf97fc0d01baf6f17e73 (diff)
Vary vp8 speed based on height.
Diffstat (limited to 'bin/stream')
-rwxr-xr-xbin/stream25
1 files changed, 13 insertions, 12 deletions
diff --git a/bin/stream b/bin/stream
index a326003..b758a49 100755
--- a/bin/stream
+++ b/bin/stream
@@ -88,20 +88,21 @@ HEIGHT=270
HEIGHTS_WEBM="$HEIGHT"
HEIGHTS_MPEG="$HEIGHT"
-# TODO: Vary vpx quality based on height
-SPEED_VP8=15
-
-# inspired by Apple HLS recommendations
-# TODO: Externalize to site-specific configfile
- if [ $HEIGHT -le 234 ]; then VBITRATE=145000; SPEED_X264=slow; SPEED_X264_ALONE=fast;
-elif [ $HEIGHT -le 270 ]; then VBITRATE=365000; SPEED_X264=faster; SPEED_X264_ALONE=fast;
-elif [ $HEIGHT -le 360 ]; then VBITRATE=730000; SPEED_X264=faster; SPEED_X264_ALONE=fast;
-elif [ $HEIGHT -le 432 ]; then VBITRATE=1100000; SPEED_X264=veryfast; SPEED_X264_ALONE=fast;
-elif [ $HEIGHT -le 540 ]; then VBITRATE=2000000; SPEED_X264=toofast; SPEED_X264_ALONE=veryfast;
-elif [ $HEIGHT -le 720 ]; then VBITRATE=3000000; SPEED_X264=toofast; SPEED_X264_ALONE=ultrafast;
+# * height steps and bitrates based on https://developer.apple.com/library/content/documentation/General/Reference/HLSAuthoringSpec/Requirements.html
+# * speeds tuned to just below 100% cpu usage for each combination on a multi-core computer
+# TODO: adjust height steps or bitrates for 4:3 aspect ratio
+# TODO: resolve steps from source height using http://aarmstrong.org/tutorials/aspect-ratios-and-h264
+# TODO: Externalize speeds to site-specific configfile
+ if [ $HEIGHT -le 234 ]; then VBITRATE=145000; SPEED_X264=fast; SPEED_X264_ALONE=fast; SPEED_VP8=3; SPEED_VP8_ALONE=2;
+elif [ $HEIGHT -le 270 ]; then VBITRATE=365000; SPEED_X264=faster; SPEED_X264_ALONE=fast; SPEED_VP8=4; SPEED_VP8_ALONE=2;
+elif [ $HEIGHT -le 360 ]; then VBITRATE=730000; SPEED_X264=veryfast; SPEED_X264_ALONE=fast; SPEED_VP8=5; SPEED_VP8_ALONE=3;
+elif [ $HEIGHT -le 432 ]; then VBITRATE=1100000; SPEED_X264=ultrafast; SPEED_X264_ALONE=fast; SPEED_VP8=8; SPEED_VP8_ALONE=4;
+elif [ $HEIGHT -le 540 ]; then VBITRATE=2000000; SPEED_X264=toofast; SPEED_X264_ALONE=veryfast; SPEED_VP8_ALONE=5;
+elif [ $HEIGHT -le 720 ]; then VBITRATE=3000000; SPEED_X264=toofast; SPEED_X264_ALONE=ultrafast; SPEED_VP8_ALONE=15;
fi
+[ toofast != "$SPEED_X264" ] || HEIGHTS_MPEG=
+[ -n "$HEIGHTS_MPEG" ] || SPEED_VP8="$SPEED_VP8_ALONE"
[ -n "$HEIGHTS_WEBM" ] || SPEED_X264="$SPEED_X264_ALONE"
-[ toofast != "$SPEED_X264" ] || exit1 "Not enough CPU - reduce size or streams"
# shellcheck disable=SC2048,SC2059
echo_n() {