Introduction
Introduction Statistics Contact Development Disclaimer Help
tFix title and image viewing duration, create fallback stream - bitreich-memest…
git clone git://src.adamsgaard.dk/bitreich-memestats
Log
Files
Refs
LICENSE
---
commit 3c3d3a067be47f9db268d4817d937a49ecf5f051
parent 9a39dea48b13099733de2f6ff98de64901702b09
Author: Anders Damsgaard <[email protected]>
Date: Thu, 11 Jun 2020 13:42:37 +0000
Fix title and image viewing duration, create fallback stream
Diffstat:
M brtv-start.sh | 100 ++++++++++++++++++-----------…
1 file changed, 57 insertions(+), 43 deletions(-)
---
diff --git a/brtv-start.sh b/brtv-start.sh
t@@ -1,6 +1,5 @@
#!/bin/sh
-# start streaming server, but beforehand reencode memecache and
-# generate title animations if necessary
+# generate title animations and start streaming server
if [ $# -ne 1 ]; then
printf 'usage: %s <memecache_path>\n' "$0" >&2
t@@ -9,24 +8,23 @@ fi
### CONFIGURATION START
-# mkv streaming server executable
-# git://github.com/klaxa/mkvserver_mk2
-bin=mkvserver_mk2
+# streaming server executable
+#bin=vlc
+
+# intermediate playlist file
+playlist="playlist"
# memecache source dir
memecache="$1"
# converted memecache dir
-memecache_conv=memecache
+memecache_conv="memecache"
# title animations dir
title="title"
-# desired ffmpeg codec flags
-ffmpeg_codec="-c:v libx264 -c:a libvorbis -f matroska"
-
-# port for streaming socket (combined stream hosted on port 8080)
-commport=12345
+# ffmpeg codec flags for generated animations
+ffmpeg_codec="-acodec libopus -b:a 96K -vcodec libvpx -f webm -vf scale=1280:-…
# target video resolution
video_resolution=1280x720
t@@ -35,11 +33,11 @@ video_resolution=1280x720
bgcolor=magenta
fcolor=white
-# show image memes for this duration [s]
+# show image memes for this duration, must be two digits [s]
image_display_time=10
-# show title slides for this duration [s]
-title_display_time=5
+# show title slides for this duration, must be two digits [s]
+title_display_time=05
### CONFIGURATION END
t@@ -54,73 +52,89 @@ video_from_img() {
-f lavfi \
-i anullsrc=r=48000 \
-i "$1" \
- -t "00:${3}:00" \
+ -t "00:00:${image_display_time}" \
$ffmpeg_codec \
"$2";
}
title_slide() {
img="$(basename "${1%.*}".png)"
- convert -size "$video_resolution" "xc:${bgcolor}" -pointsize 48 -fill …
+ convert -size "$video_resolution" "xc:${bgcolor}" \
+ -pointsize 48 -fill "$fgcolor" \
-gravity center -draw "text 0,0 '#${img%.*}'" "$img"
ffmpeg -y \
-f lavfi \
-i anullsrc=r=48000 \
-i "$img" \
- -t "00:${title_display_time}:00" \
+ -t "00:00:${title_display_time}" \
$ffmpec_codec \
- "$2";
+ "$2" && rm "$img"
}
video_conv() {
- ffmpeg -y -i "$1" $ffmpeg_codec "$2"
+ ffmpeg -y -i "$1" $ffmpeg_codec -max_muxing_queue_size 1024 "$2"
}
-
mkdir -p "$title"
mkdir -p "$memecache_conv"
# generate video from each image
-for f in "$memecache"/*.jpg "$memecache"/*.png "$memecache"/*.JPG; do
- out="${memecache_conv}/$(basename "${f%.*}.mkv")"
- if [ ! -e "$out" ]; then
+for f in "$memecache"/*.jpg "$memecache"/*.JPG "$memecache"/*.png "$memecache"…
+ out="${memecache_conv}/$(basename "${f%.*}.webm")"
+ if [ -e "$f" ] && [ ! -e "$out" ]; then
+ printf 'in: %s, out: %s\n' "$f" "$out"
fit_img_16_9 "$f" "${out%.*}.jpg"
- video_from_img "${out%.mkv}.jpg" "${out}" "${image_display_tim…
+ video_from_img "${out%.webm}.jpg" "${out}"
fi
done
+# make animation for fallback stream
+if [ ! -f bitreich-tv.webm ]; then
+ title_slide bitreich-tv bitreich-tv.webm
+fi
+
+
# make title slides for video and converted images and encode to common codec
for f in "$memecache"/*.mkv \
"$memecache"/*.mp4 \
"$memecache"/*.webm \
- "$memecache_conv"/*.mkv; do
+ "$memecache_conv"/*.webm; do
- title_path="${title}/$(basename "${f%.*}.mkv")"
- [ ! -e "${title_path}" ] && title_slide "$f" "$title_path"
+ title_path="${title}/$(basename "${f%.*}.webm")"
+ [ ! -e "$title_path" ] && title_slide "$f" "$title_path"
- out="${memecache_conv}/$(basename "${f%.*}.mkv")"
- [ ! -e "${out}" ] && video_conv "$f" "$out"
+ out="${memecache_conv}/$(basename "${f%.*}.webm")"
+ [ ! -e "$out" ] && video_conv "$f" "$out"
done
# generate random playlist from converted memes and add title slides
-find "$memecache_conv" -maxdepth 1 -name "*.mkv" -type f | sort -R | \
- sed "s/^/file '/;s/$/'/" | \
- awk -v titledir="$title" '
+find "$memecache_conv" -maxdepth 1 -name "*.webm" -type f | \
+ sort -R | \
+ awk -v memecachedir="$memecache" -v titledir="$title" '
function add_title(s) {
- sub(/\.\//, titledir"/", s);
+ sub(/memecache/, "title", s);
return s
}
{line=$0;
- print add_title($line);
- print $0}' > playlist
+ print "file \""add_title($line)"\"";
+ print "file \""$0"\""}' | sed "s/\"/'/g" > "$playlist"
+ #print "file \""$0"\""}' | sed "s/\"/'/g" |grep -v title> "$playlist"
+
+printf '\nstarting fallback stream\n'
+ffmpeg -loglevel quiet \
+ -stream_loop -1 -i bitreich-tv.webm
+ -f webm -codec copy
+ icecast://source:hasselkospiserkrymmel@localhost:8000/brtvfallback
+
+exit 0
-netcat -l -p "$commport" | $bin >/dev/null 2>&1 &
-sleep 2
+sleep 5
-ffmpeg -f concat -safe 0 -i playlist \
- -f matroska \
- $ffmpeg_codec \
- -max_muxing_queue_size 9999 \
- tcp://localhost:$commport
+printf '\nstarting stream\n'
-pkill $bin
+ffmpeg -f concat -safe 0 -stream_loop -1 -i "$playlist" \
+ -f webm -cluster_size_limit 2M -cluster_time_limit 5100 -content_type …
+ -analyzeduration 2M -probesize 2M \
+ -codec copy \
+ -deadline realtime -threads 8 \
+ icecast://source:hasselkospiserkrymmel@localhost:8000/brtv
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.