feat(user/bkmpv2):Filter audio files by file extension
[BK-2020-03.git] / user / transcribe_whisper.sh
old mode 100644 (file)
new mode 100755 (executable)
index a6fdad5..00dc313
@@ -1,9 +1,16 @@
 #!/bin/bash
-# Usage: ./transcribe_whisper.sh 3
-# Input: arg1  CUDA graphics card number (zero-indexed)
-# Version: 0.0.1
+# Desc: Runs OpenAI Whisper on working directory media files
+# Usage: ./transcribe_whisper.sh [dir] 3
+# Input: arg1  input dir
+#        arg2  CUDA graphics card number (zero-indexed)
+# Version: 0.4.0
 # Depends: whisper ( https://github.com/openai/whisper )
 
+# Find settings
+firegex=".+\(aac\|aif\|aiff\|flac\|m4a\|m4b\|mkv\|mp3\|mp4\|ogg\|opus\|wav\)$"; # update according to `find . -type f | grep -Eo "\.([[:alnum:]])+$" | sort -u`
+fsize="10k"; # default: minimum "10k"
+fdepth="10"; # find depth
+
 yell() { echo "$0: $*" >&2; } # print script path and all args to stderr
 die() { yell "$*"; exit 111; } # same as yell() but non-zero exit status
 must() { "$@" || die "cannot $*"; } # runs args as command, reports args if command fails
@@ -36,8 +43,23 @@ checkInt() {
        return 1;
     fi;
 } # Checks if arg is integer
+find_flist() {
+    # Desc: print file list to stdout via `find` using script parameters
+    # Input: arg1:          path to dir
+    #        var:  fdepth   find depth
+    #        var:  firegex  pattern find iregex
+    #        var:  fsize    find size
+    if [[ ! -d "$1" ]]; then return 1; fi;
+    must find "$1" -maxdepth "$fdepth" -type f -iregex "$firegex" -size +"$fsize";
+}; # print file list to stdout from dir with script parameters
 main() {
-    cuda_num="$1";
+    # Input: arg1: dir_in    input dir
+    #        arg2: cuda_num  cuda GPU index
+    #        var:  fdepth    (find_flist) find depth
+    #        var:  firegex   (find_flist) pattern find iregex
+    #        var:  fsize     (find_flist) find size
+    dir_in="$1";
+    cuda_num="$2";
     if ! checkInt "$cuda_num"; then die "FATAL:No graphics card selected."; fi;
     while read -r line; do
         echo "STATUS:Processing:$line" 1>&2;
@@ -67,8 +89,9 @@ main() {
                 echo "STATUS:$SECONDS:Finished:$line" 1>&2;
                 rm "$ftmp"; # remove .tmp file
             );
-    done < <(find . -type f -name "*.mp3" | shuf )
+    done < <(find_flist "$dir_in" | shuf);
 }; # main program
+export -f yell die must find_flist;
 
 main "$@";