]> git.djapps.eu Git - pkg/ggml/sources/whisper.cpp/commitdiff
Allow for Twitch.tv live transcription
authorkeyehzy <redacted>
Thu, 8 Dec 2022 02:45:54 +0000 (23:45 -0300)
committerGeorgi Gerganov <redacted>
Thu, 8 Dec 2022 17:20:04 +0000 (19:20 +0200)
We rely on streamlink library to give us a stream, then we proceed similarly to
the radio livestream example.

examples/twitch.sh [new file with mode: 0755]

diff --git a/examples/twitch.sh b/examples/twitch.sh
new file mode 100755 (executable)
index 0000000..7a5ecb5
--- /dev/null
@@ -0,0 +1,78 @@
+#!/bin/bash
+set -eo pipefail
+
+step=10
+model=base.en
+threads=1
+
+help()
+{
+    echo "Example program for captioning a livestream from twitch.tv."
+    echo
+    echo "Usage: ./twitch.sh -s [step] -m [model] -t [threads] [url]"
+    echo "options:"
+    echo "-s       Step in seconds (default is $step)."
+    echo "-m       Choose model, options are: 'tiny.en' 'tiny' 'base.en' 'base' 'small.en' 'small' 'medium.en' 'medium' 'large-v1' 'large' (default is '$model')."
+    echo "-t       Number of threads to use."
+    echo "-h       Print this help page."
+    echo
+}
+
+while getopts ":s:m:t:h" option; do
+    case $option in
+       s)
+            step=$OPTARG;;
+       m)
+            model=$OPTARG;;
+       t)
+           threads=$OPTARG;;
+       h)
+            help
+            exit;;
+       \?)
+           help
+           exit;;
+    esac
+done
+
+url=${@:$OPTIND:1}
+
+if [ -z $url ]; then
+    help
+    exit
+fi
+
+echo "Piping from streamlink url=$url model=$model step=$step threads=$threads"
+streamlink $url best -O 2>/dev/null | ffmpeg -loglevel quiet -i - -y -probesize 32 -y -ar 16000 -ac 1 -acodec pcm_s16le /tmp/whisper-live0.wav &
+
+if [ $? -ne 0 ]; then
+    printf "error: ffmpeg failed\n"
+    exit 1
+fi
+
+echo "Buffering stream... (this should take $step seconds)"
+sleep $(($step))
+
+set +e
+
+echo "Starting..."
+
+i=0
+while true
+do
+    err=1
+    while [ $err -ne 0 ]; do
+        if [ $i -gt 0 ]; then
+            ffmpeg -loglevel quiet -v error -noaccurate_seek -i /tmp/whisper-live0.wav -y -ss $(($i*$step-1)).5 -t $step -c copy /tmp/whisper-live.wav 2> /tmp/whisper-live.err
+        else
+            ffmpeg -loglevel quiet -v error -noaccurate_seek -i /tmp/whisper-live0.wav -y -ss $(($i*$step)) -t $step -c copy /tmp/whisper-live.wav 2> /tmp/whisper-live.err
+        fi
+        err=$(cat /tmp/whisper-live.err | wc -l)
+    done
+
+    ./main -t $threads -m ./models/ggml-$model.bin -f /tmp/whisper-live.wav --no-timestamps -otxt 2> /tmp/whispererr | tail -n 1
+
+    sleep 1
+
+    ((i=i+1))
+done