X-Git-Url: https://zdv2.bktei.com/gitweb/BK-2020-03.git/blobdiff_plain/0581fa7805868eef9f6fecf02cb66545b516203d..ad0ecd05b0768d16be08f04593d0295a4eaf8e07:/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 index 0000000..6634766 --- /dev/null +++ b/unitproc/draft/bktemp-get_av_format @@ -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+