summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Smedegaard <dr@jones.dk>2017-05-18 01:53:42 +0200
committerJonas Smedegaard <dr@jones.dk>2017-05-18 01:53:47 +0200
commit6f794349b9c0e7da1190235fdbd5229de533165f (patch)
tree6d7cdbec4891317b4aca0d7b330b94594384172e
parente30d3e8e31c6546b5fc8ac52db4cb241c2804de4 (diff)
Resolve bitrate and speed from bits (not simply height).
-rwxr-xr-xbin/capture+encode+serve32
-rwxr-xr-xbin/decode+edit+encode2
-rwxr-xr-xbin/decode+edit+encodeDV24
-rwxr-xr-xbin/decode+edit+loop+encode+stream28
-rwxr-xr-xbin/encodevideo+loop+stream28
-rwxr-xr-xbin/loop+encode+stream28
-rwxr-xr-xbin/stream28
7 files changed, 111 insertions, 59 deletions
diff --git a/bin/capture+encode+serve b/bin/capture+encode+serve
index 26c5f40..9c78374 100755
--- a/bin/capture+encode+serve
+++ b/bin/capture+encode+serve
@@ -43,51 +43,61 @@ chomp @ADEVICES;
#use Data::Dump; die dd @ADEVICES;
-my $HEIGHT = 240;
+my $HEIGHT = 288;
my $FRAMERATE = 25;
my $AUDIORATE = 48000;
-# * height steps and bitrates based on https://developer.apple.com/library/content/documentation/General/Reference/HLSAuthoringSpec/Requirements.html
+my $RATIO_NUM = 4;
+my $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
-my ( $VBITRATE, $SPEED_X264, $SPEED_X264_ALONE );
-if ( $HEIGHT le 234 ) {
+my ( $VBITRATE, $SPEED_X264, $SPEED_X264_ALONE, $SPEED_VP8,
+ $SPEED_VP8_ALONE );
+$RATIO_NUM ||= 16;
+$RATIO_DEN ||= 9;
+my $WIDTH ||= $HEIGHT * $RATIO_NUM / $RATIO_DEN;
+$BITS = $WIDTH * $HEIGHT;
+
+if ( $BITS le 110592 ) { # 234p → 97344
$VBITRATE = 145000;
$SPEED_X264 = 'fast';
$SPEED_X264_ALONE = 'fast';
$SPEED_VP8 = 3;
$SPEED_VP8_ALONE = 2;
}
-elsif ( $HEIGHT le 270 ) {
+elsif ( $BITS le 150528 ) { # 270p → 129600
$VBITRATE = 365000;
$SPEED_X264 = 'faster';
$SPEED_X264_ALONE = 'fast';
$SPEED_VP8 = 4;
$SPEED_VP8_ALONE = 2;
}
-elsif ( $HEIGHT le 360 ) {
+elsif ( $BITS le 196608 ) { # 360p → 172800
$VBITRATE = 730000;
$SPEED_X264 = 'veryfast';
$SPEED_X264_ALONE = 'fast';
$SPEED_VP8 = 5;
$SPEED_VP8_ALONE = 3;
}
-elsif ( $HEIGHT le 432 ) {
+elsif ( $BITS le 331776 ) { # 432p → 331776
$VBITRATE = 1100000;
$SPEED_X264 = 'ultrafast';
$SPEED_X264_ALONE = 'fast';
$SPEED_VP8 = 8;
$SPEED_VP8_ALONE = 4;
}
-elsif ( $HEIGHT le 540 ) {
+elsif ( $BITS le 589824 ) { # 540p → 518400
$VBITRATE = 2000000;
$SPEED_X264 = 'toofast';
$SPEED_X264_ALONE = 'veryfast';
$SPEED_VP8_ALONE = 5;
}
-elsif ( $HEIGHT le 720 ) {
+elsif ( $BITS le 921600 ) { # 720p → 921600
$VBITRATE = 3000000;
$SPEED_X264 = 'toofast';
$SPEED_X264_ALONE = 'ultrafast';
diff --git a/bin/decode+edit+encode b/bin/decode+edit+encode
index edd428f..f21ef51 100755
--- a/bin/decode+edit+encode
+++ b/bin/decode+edit+encode
@@ -25,7 +25,7 @@ elif [ $HEIGHT -le 432 ]; then
VBITRATE=1100000
elif [ $HEIGHT -le 540 ]; then
VBITRATE=2000000
-elif [ $HEIGHT -le 720 ]; then
+elif [ $HEIGHT -le 720 ]; then # 720p → 921600
VBITRATE=3000000
fi
diff --git a/bin/decode+edit+encodeDV b/bin/decode+edit+encodeDV
index 6586b8a..ac64d2c 100755
--- a/bin/decode+edit+encodeDV
+++ b/bin/decode+edit+encodeDV
@@ -10,18 +10,28 @@ OUTPUT=../tmp/omni/show0/earth.dv
HEIGHT=360
-# inspired by Apple HLS recommendations
-if [ $HEIGHT -le 234 ]; then
+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
+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
-elif [ $HEIGHT -le 270 ]; then
+elif [ $BITS -le 150528 ]; then # 270p → 129600
VBITRATE=365000
-elif [ $HEIGHT -le 360 ]; then
+elif [ $BITS -le 196608 ]; then # 360p → 172800
VBITRATE=730000
-elif [ $HEIGHT -le 432 ]; then
+elif [ $BITS -le 331776 ]; then # 432p → 331776
VBITRATE=1100000
-elif [ $HEIGHT -le 540 ]; then
+elif [ $BITS -le 589824 ]; then # 540p → 518400
VBITRATE=2000000
-elif [ $HEIGHT -le 720 ]; then
+elif [ $BITS -le 921600 ]; then # 720p → 921600
VBITRATE=3000000
fi
diff --git a/bin/decode+edit+loop+encode+stream b/bin/decode+edit+loop+encode+stream
index c91ac96..8904a4a 100755
--- a/bin/decode+edit+loop+encode+stream
+++ b/bin/decode+edit+loop+encode+stream
@@ -19,29 +19,37 @@ FIRSTPORT=${2:-5002} # even number - next 3 ports used too
ITERATIONS=${3-0} # endless by default
-HEIGHT=360
+HEIGHT=384
-# * 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_VP8=2
-elif [ $HEIGHT -le 270 ]; then
+elif [ $BITS -le 150528 ]; then # 270p → 129600
VBITRATE=365000
SPEED_VP8=2
-elif [ $HEIGHT -le 360 ]; then
+elif [ $BITS -le 196608 ]; then # 360p → 172800
VBITRATE=730000
SPEED_VP8=3
-elif [ $HEIGHT -le 432 ]; then
+elif [ $BITS -le 331776 ]; then # 432p → 331776
VBITRATE=1100000
SPEED_VP8=4
-elif [ $HEIGHT -le 540 ]; then
+elif [ $BITS -le 589824 ]; then # 540p → 518400
VBITRATE=2000000
SPEED_VP8=5
-elif [ $HEIGHT -le 720 ]; then
+elif [ $BITS -le 921600 ]; then # 720p → 921600
VBITRATE=3000000
SPEED_VP8=15
fi
diff --git a/bin/encodevideo+loop+stream b/bin/encodevideo+loop+stream
index e4b6b38..266a733 100755
--- a/bin/encodevideo+loop+stream
+++ b/bin/encodevideo+loop+stream
@@ -14,29 +14,37 @@ fi
FIRSTPORT=${2:-5002} # even number - next 3 ports used too
# TODO: resolve this or resize based on it
-HEIGHT=360
+HEIGHT=384
-# * 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_VP8=2
-elif [ $HEIGHT -le 270 ]; then
+elif [ $BITS -le 150528 ]; then # 270p → 129600
VBITRATE=365000
SPEED_VP8=2
-elif [ $HEIGHT -le 360 ]; then
+elif [ $BITS -le 196608 ]; then # 360p → 172800
VBITRATE=730000
SPEED_VP8=3
-elif [ $HEIGHT -le 432 ]; then
+elif [ $BITS -le 331776 ]; then # 432p → 331776
VBITRATE=1100000
SPEED_VP8=4
-elif [ $HEIGHT -le 540 ]; then
+elif [ $BITS -le 589824 ]; then # 540p → 518400
VBITRATE=2000000
SPEED_VP8=5
-elif [ $HEIGHT -le 720 ]; then
+elif [ $BITS -le 921600 ]; then # 720p → 921600
VBITRATE=3000000
SPEED_VP8=15
fi
diff --git a/bin/loop+encode+stream b/bin/loop+encode+stream
index a0a2b1d..5beef2d 100755
--- a/bin/loop+encode+stream
+++ b/bin/loop+encode+stream
@@ -20,29 +20,37 @@ AFRAMERATE_OPUS=48000
ABITRATE_OPUS=48000
# TODO
-HEIGHT=360
+HEIGHT=384
-# * 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_VP8=2
-elif [ $HEIGHT -le 270 ]; then
+elif [ $BITS -le 150528 ]; then # 270p → 129600
VBITRATE=365000
SPEED_VP8=2
-elif [ $HEIGHT -le 360 ]; then
+elif [ $BITS -le 196608 ]; then # 360p → 172800
VBITRATE=730000
SPEED_VP8=3
-elif [ $HEIGHT -le 432 ]; then
+elif [ $BITS -le 331776 ]; then # 432p → 331776
VBITRATE=1100000
SPEED_VP8=4
-elif [ $HEIGHT -le 540 ]; then
+elif [ $BITS -le 589824 ]; then # 540p → 518400
VBITRATE=2000000
SPEED_VP8=5
-elif [ $HEIGHT -le 720 ]; then
+elif [ $BITS -le 921600 ]; then # 720p → 921600
VBITRATE=3000000
SPEED_VP8=15
fi
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