summaryrefslogtreecommitdiff
path: root/bin/stream
diff options
context:
space:
mode:
Diffstat (limited to 'bin/stream')
-rwxr-xr-xbin/stream28
1 files changed, 18 insertions, 10 deletions
diff --git a/bin/stream b/bin/stream
index 9df3b56..a66d869 100755
--- a/bin/stream
+++ b/bin/stream
@@ -84,36 +84,44 @@ ABITRATE_OPUS=48000
ABITRATE_AAC=64000
# FIXME: support multiple heights
-HEIGHT=270
+HEIGHT=288
HEIGHTS_WEBM="$HEIGHT"
HEIGHTS_MPEG="$HEIGHT"
-# * height steps and bitrates based on https://developer.apple.com/library/content/documentation/General/Reference/HLSAuthoringSpec/Requirements.html
+RATIO_NUM=4
+RATIO_DEN=3
+
+# * bitrates and bits in parens based on https://developer.apple.com/library/content/documentation/General/Reference/HLSAuthoringSpec/Requirements.html
+# + bits rounded up to include nearby modulo 16 formats
+# + best (i.e. high-modulo) 16:9 heights: 216 288 360 432 576 720
+# + best (i.e. high-modulo) 4:3 heights: 288 312 384 480 624 816
# * 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
+RATIO_NUM=${RATION_NUM:-16}
+RATIO_DEN=${RATION_DEN:-9}
+WIDTH=${WIDTH:-$((HEIGHT*RATIO_NUM/RATIO_DEN))}
+BITS=$((WIDTH*HEIGHT))
+if [ $BITS -le 110592 ]; then # 234p → 97344
VBITRATE=145000
SPEED_X264=fast; SPEED_X264_ALONE=fast
SPEED_VP8=3; SPEED_VP8_ALONE=2
-elif [ $HEIGHT -le 270 ]; then
+elif [ $BITS -le 150528 ]; then # 270p → 129600
VBITRATE=365000
SPEED_X264=faster; SPEED_X264_ALONE=fast
SPEED_VP8=4; SPEED_VP8_ALONE=2
-elif [ $HEIGHT -le 360 ]; then
+elif [ $BITS -le 196608 ]; then # 360p → 172800
VBITRATE=730000
SPEED_X264=veryfast; SPEED_X264_ALONE=fast
SPEED_VP8=5; SPEED_VP8_ALONE=3
-elif [ $HEIGHT -le 432 ]; then
+elif [ $BITS -le 331776 ]; then # 432p → 331776
VBITRATE=1100000
SPEED_X264=ultrafast; SPEED_X264_ALONE=fast
SPEED_VP8=8; SPEED_VP8_ALONE=4
-elif [ $HEIGHT -le 540 ]; then
+elif [ $BITS -le 589824 ]; then # 540p → 518400
VBITRATE=2000000
SPEED_X264=toofast; SPEED_X264_ALONE=veryfast
SPEED_VP8_ALONE=5
-elif [ $HEIGHT -le 720 ]; then
+elif [ $BITS -le 921600 ]; then # 720p → 921600
VBITRATE=3000000
SPEED_X264=toofast; SPEED_X264_ALONE=ultrafast
SPEED_VP8_ALONE=15