feat(user/bkots):Optimize with GNU Parallel for executing commands
[BK-2020-03.git] / unitproc / bktemp-get_audio_format
1 #!/usr/bin/env bash
2
3 get_audio_format() {
4 # Desc: Gets audio format of file as string
5 # Usage: get_audio_format arg1
6 # Depends: ffprobe
7 # Version: 0.0.1
8 # Input: arg1: input file path
9 # Output: stdout (if valid audio format)
10 # exit code 0 if audio file; 1 otherwise
11 # Example: get_audio_format myvideo.mp4
12 # Note: Would return "opus" if full ffprobe report had 'Audio: opus, 48000 Hz, stereo, fltp'
13 # Note: Not tested with videos containing multiple video streams
14 # Ref/Attrib: [1] https://stackoverflow.com/questions/5618363/is-there-a-way-to-use-ffmpeg-to-determine-the-encoding-of-a-file-before-transcod
15 # [2] https://stackoverflow.com/questions/44123532/how-to-find-out-the-file-extension-for-extracting-audio-tracks-with-ffmpeg-and-p#comment88464070_50723126
16 local audio_format file_in;
17 local return_state;
18 file_in="$1";
19
20 # Return error exit code if not audio file
21 ## Return error if ffprobe itself exited on error
22 if ! ffprobe -v error -select_streams a -show_entries stream=codec_name -of default=nokey=1:noprint_wrappers=1 "$file_in" 1>/dev/null 2>&1; then
23 return_state="false";
24 fi;
25
26 # Get audio format
27 audio_format="$(ffprobe -v error -select_streams a -show_entries stream=codec_name -of default=nokey=1:noprint_wrappers=1 "$file_in")"; # see [1]
28
29 ## Return error if audio format is incorrectly formatted (e.g. reject if contains spaces)
30 pattern="^[[:alnum:]]+$"; # alphanumeric string with no spaces
31 if [[ $audio_format =~ $pattern ]]; then
32 return_state="true";
33 # Report audio format
34 echo "$audio_format";
35 else
36 return_state="false";
37 fi;
38
39 # Report exit code
40 if [[ $return_state = "true" ]]; then
41 return 0;
42 else
43 return 1;
44 fi;
45 } # Get audio format as stdout
46
47 # Author: Steven Baltakatei Sandoval
48 # License: GPLv3+