diff --git a/bin/extract-16bit-wav-from-video b/bin/extract-16bit-wav-from-video
new file mode 100644
index 0000000..32802c9
--- /dev/null
+++ b/bin/extract-16bit-wav-from-video
@@ -0,0 +1,50 @@
+#!/usr/bin/env bash
+
+if which tput >/dev/null 2>&1; then
+ ncolors=$(tput colors)
+fi
+if [ -t 1 ] && [ -n "$ncolors" ] && [ "$ncolors" -ge 8 ]; then
+ RED="$(tput setaf 1)"
+ GREEN="$(tput setaf 2)"
+ YELLOW="$(tput setaf 3)"
+ BLUE="$(tput setaf 4)"
+ MAGENTA="$(tput setaf 5)"
+ CYAN="$(tput setaf 6)"
+ BOLD="$(tput bold)"
+ NORMAL="$(tput sgr0)"
+else
+ RED=""
+ GREEN=""
+ YELLOW=""
+ BLUE=""
+ MAGENTA=""
+ CYAN=""
+ BOLD=""
+ NORMAL=""
+fi
+
+input="$1"
+output_name="$2"
+
+if [[ $input == "" || $output_name == "" ]]; then
+ printf "${BOLD}${RED}Usage: $0 ${NORMAL}\n"
+ exit 1
+fi
+
+if [[ ! -f "$input" ]]; then
+ printf "${RED}${BOLD}Error: failed to extract audio. Video file \"$input\" doesn't exist.\n${NORMAL}"
+ exit 1
+fi
+
+# Add extension if not provided.
+output_basename=$(basename -- "$output_name")
+output_extension="${output_basename##*.}"
+if [[ $output_extension != "wav" ]]; then
+ output_name="${output_name}.wav"
+fi
+
+printf "\n${YELLOW}${BOLD}Extracting 16-bit WAV from $input | output: $output_name${NORMAL}\n"
+
+ffmpeg -i "$input" -ar 16000 -ac 1 -c:a pcm_s16le "$output_name"
+
+printf "${GREEN}${BOLD}Done extracting 16-bit WAV from $input | output: $output_name${NORMAL}\n"
diff --git a/bin/extract-audio-from-video b/bin/extract-audio-from-video
index 30e5396..ae4b27f 100644
--- a/bin/extract-audio-from-video
+++ b/bin/extract-audio-from-video
@@ -41,7 +41,7 @@ if [[ $bitrate == "" ]]; then
bitrate="64"
fi
-printf "\n${YELLOW}${BOLD}Extracting audio from '$filename.$extension' | bitrate: ${bitrate}k | output: $output_name${NORMAL}\n"
+printf "\n${YELLOW}${BOLD}Extracting audio from $filename.$extension | bitrate: ${bitrate}k | output: $output_name${NORMAL}\n"
if [[ $transcode == "1" ]]; then
# Transcode audio
@@ -51,5 +51,5 @@ else
ffmpeg -i "$filename.$extension" -vn -acodec copy "$output_name"
fi
-printf "\n${GREEN}${BOLD}Done extracting audio from '$filename.$extension' | output name '$output_name'${NORMAL}\n\n"
+printf "\n${GREEN}${BOLD}Done extracting audio from $filename.$extension | output name '$output_name'${NORMAL}\n\n"
diff --git a/bin/transcribe-audio b/bin/transcribe-audio
new file mode 100644
index 0000000..ad9f92d
--- /dev/null
+++ b/bin/transcribe-audio
@@ -0,0 +1,54 @@
+#!/usr/bin/env bash
+
+if which tput >/dev/null 2>&1; then
+ ncolors=$(tput colors)
+fi
+if [ -t 1 ] && [ -n "$ncolors" ] && [ "$ncolors" -ge 8 ]; then
+ RED="$(tput setaf 1)"
+ GREEN="$(tput setaf 2)"
+ YELLOW="$(tput setaf 3)"
+ BLUE="$(tput setaf 4)"
+ MAGENTA="$(tput setaf 5)"
+ CYAN="$(tput setaf 6)"
+ BOLD="$(tput bold)"
+ NORMAL="$(tput sgr0)"
+else
+ RED=""
+ GREEN=""
+ YELLOW=""
+ BLUE=""
+ MAGENTA=""
+ CYAN=""
+ BOLD=""
+ NORMAL=""
+fi
+
+input_wav="$1"
+output_name_without_ext="$2"
+model="$3"
+threads=$4
+
+# 4 seems to be the sweet spot.
+default_thread_count=4
+
+if [[ $input_wav == "" || $output_name_without_ext == "" || $model == "" ]]; then
+ printf "${BOLD}${RED}Usage: $0