feat(user):Script to get gpg fingerprints from git dir
[BK-2020-03.git] / unitproc / draft / bktemp-get_av_format
diff --git a/unitproc/draft/bktemp-get_av_format b/unitproc/draft/bktemp-get_av_format
new file mode 100644 (file)
index 0000000..6634766
--- /dev/null
@@ -0,0 +1,50 @@
+#!/usr/bin/env bash
+
+get_av_format() {
+    # Desc: Gets audio/video format of file as string
+    # Usage: get_av_format arg1
+    # Depends: ffprobe
+    # Version: 0.0.1
+    # Input: arg1: input file path
+    # Output: stdout (if valid audio or video format)
+    #         exit code 0 if av file; 1 otherwise
+    # Example: get_av_format myvideo.mp4
+    #   Note: Would return "opus" if full ffprobe report had 'Audio: opus, 48000 Hz, stereo, fltp'
+    # Note: Not tested with videos containing multiple video streams
+    # Ref/Attrib: [1] https://stackoverflow.com/questions/5618363/is-there-a-way-to-use-ffmpeg-to-determine-the-encoding-of-a-file-before-transcod
+    #             [2] https://stackoverflow.com/questions/44123532/how-to-find-out-the-file-extension-for-extracting-audio-tracks-with-ffmpeg-and-p#comment88464070_50723126
+    # TODO 2022-08-19: output path of validated file to stdout for gnu parallel use
+    local av_format file_in;
+    local return_state;
+    file_in="$1";
+
+    # Return error exit code if not audio file
+    ## Return error if ffprobe itself exited on error
+    if ! ffprobe -v error -show_entries stream=codec_name -of default=nokey=1:noprint_wrappers=1 "$file_in" 1>/dev/null 2>&1; then
+       return_state="false";
+    fi;
+    
+    # Get av format
+    av_format="$(ffprobe -v error -select_streams a -show_entries stream=codec_name -of default=nokey=1:noprint_wrappers=1 "$file_in")"; # see [1]
+
+    ## Return error if audio av is incorrectly formatted (e.g. reject if contains spaces)
+    pattern="^[[:alnum:]]+$"; # alphanumeric string with no spaces
+    if [[ $av_format =~ $pattern ]]; then
+       return_state="true";
+       # Report audio format
+       echo "$av_format";
+    else
+       return_state="false";
+    fi;
+    
+    # Report exit code
+    if [[ $return_state = "true" ]]; then
+       return 0;
+        # echo "$1" #TODO_______________
+    else
+       return 1;
+    fi;
+} # Get audio format as stdout
+
+# Author: Steven Baltakatei Sandoval
+# License: GPLv3+