#!/bin/bash
-set -eo pipefail
+#
# Transcribe audio livestream by feeding ffmpeg output to whisper.cpp at regular intervals
# Idea by @semiformal-net
# ref: https://github.com/ggerganov/whisper.cpp/issues/185
#
+set -eo pipefail
+
url="http://a.files.bbci.co.uk/media/live/manifesto/audio/simulcast/hls/nonuk/sbr_low/ak/bbc_world_service.m3u8"
fmt=aac # the audio format extension of the stream (TODO: auto detect)
step_s=30
model="base.en"
+check_requirements()
+{
+ if ! command -v ./main &>/dev/null; then
+ echo "whisper.cpp main executable is required (make)"
+ exit 1
+ fi
+
+ if ! command -v ffmpeg &>/dev/null; then
+ echo "ffmpeg is required (https://ffmpeg.org)"
+ exit 1
+ fi
+}
+
+check_requirements
+
+
if [ -z "$1" ]; then
echo "Usage: $0 stream_url [step_s] [model]"
echo ""
#!/bin/bash
+#
+# Transcribe twitch.tv livestream by feeding audio input to whisper.cpp at regular intervals
+# Thanks to @keyehzy
+# ref: https://github.com/ggerganov/whisper.cpp/issues/209
+#
+# The script currently depends on the third-party tool "streamlink"
+# On Mac OS, you can install it via "brew install streamlink"
+#
+
set -eo pipefail
step=10
model=base.en
-threads=1
+threads=4
help()
{
echo
}
+check_requirements()
+{
+ if ! command -v ./main &>/dev/null; then
+ echo "whisper.cpp main executable is required (make)"
+ exit 1
+ fi
+
+ if ! command -v streamlink &>/dev/null; then
+ echo "streamlink is required (https://streamlink.github.io)"
+ exit 1
+ fi
+
+ if ! command -v ffmpeg &>/dev/null; then
+ echo "ffmpeg is required (https://ffmpeg.org)"
+ exit 1
+ fi
+}
+
+check_requirements
+
while getopts ":s:m:t:h" option; do
case $option in
s)
echo "Starting..."
i=0
+SECONDS=0
while true
do
err=1
./main -t $threads -m ./models/ggml-$model.bin -f /tmp/whisper-live.wav --no-timestamps -otxt 2> /tmp/whispererr | tail -n 1
- sleep 1
-
+ while [ $SECONDS -lt $((($i+1)*$step)) ]; do
+ sleep 1
+ done
((i=i+1))
done