From: Georgi Gerganov Date: Thu, 8 Dec 2022 17:17:24 +0000 (+0200) Subject: twitch.sh : various fixes and polishing X-Git-Tag: upstream/1.7.4~1745 X-Git-Url: https://git.djapps.eu/?a=commitdiff_plain;h=56822621a875091e3930b93f2fa43fe171f7e819;p=pkg%2Fggml%2Fsources%2Fwhisper.cpp twitch.sh : various fixes and polishing - check if streamlink is installed - fix audio chunking - change default threads to 4 --- diff --git a/examples/livestream.sh b/examples/livestream.sh index c64b004f..e24d0deb 100755 --- a/examples/livestream.sh +++ b/examples/livestream.sh @@ -1,15 +1,33 @@ #!/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 "" diff --git a/examples/twitch.sh b/examples/twitch.sh index 7a5ecb5a..c185fb24 100755 --- a/examples/twitch.sh +++ b/examples/twitch.sh @@ -1,9 +1,18 @@ #!/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() { @@ -18,6 +27,26 @@ 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) @@ -58,6 +87,7 @@ set +e echo "Starting..." i=0 +SECONDS=0 while true do err=1 @@ -72,7 +102,8 @@ do ./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