From 56822621a875091e3930b93f2fa43fe171f7e819 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Thu, 8 Dec 2022 19:17:24 +0200 Subject: [PATCH] twitch.sh : various fixes and polishing - check if streamlink is installed - fix audio chunking - change default threads to 4 --- examples/livestream.sh | 20 +++++++++++++++++++- examples/twitch.sh | 37 ++++++++++++++++++++++++++++++++++--- 2 files changed, 53 insertions(+), 4 deletions(-) diff --git a/examples/livestream.sh b/examples/livestream.sh index c64b004..e24d0de 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 7a5ecb5..c185fb2 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