Commit | Line | Data |
---|---|---|
ad0ecd05 SBS |
1 | #!/usr/bin/env bash |
2 | ||
3 | get_av_format() { | |
4 | # Desc: Gets audio/video format of file as string | |
5 | # Usage: get_av_format arg1 | |
6 | # Depends: ffprobe | |
7 | # Version: 0.0.1 | |
8 | # Input: arg1: input file path | |
9 | # Output: stdout (if valid audio or video format) | |
10 | # exit code 0 if av file; 1 otherwise | |
11 | # Example: get_av_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 | # TODO 2022-08-19: output path of validated file to stdout for gnu parallel use | |
17 | local av_format file_in; | |
18 | local return_state; | |
19 | file_in="$1"; | |
20 | ||
21 | # Return error exit code if not audio file | |
22 | ## Return error if ffprobe itself exited on error | |
23 | if ! ffprobe -v error -show_entries stream=codec_name -of default=nokey=1:noprint_wrappers=1 "$file_in" 1>/dev/null 2>&1; then | |
24 | return_state="false"; | |
25 | fi; | |
26 | ||
27 | # Get av format | |
28 | av_format="$(ffprobe -v error -select_streams a -show_entries stream=codec_name -of default=nokey=1:noprint_wrappers=1 "$file_in")"; # see [1] | |
29 | ||
30 | ## Return error if audio av is incorrectly formatted (e.g. reject if contains spaces) | |
31 | pattern="^[[:alnum:]]+$"; # alphanumeric string with no spaces | |
32 | if [[ $av_format =~ $pattern ]]; then | |
33 | return_state="true"; | |
34 | # Report audio format | |
35 | echo "$av_format"; | |
36 | else | |
37 | return_state="false"; | |
38 | fi; | |
39 | ||
40 | # Report exit code | |
41 | if [[ $return_state = "true" ]]; then | |
42 | return 0; | |
43 | # echo "$1" #TODO_______________ | |
44 | else | |
45 | return 1; | |
46 | fi; | |
47 | } # Get audio format as stdout | |
48 | ||
49 | # Author: Steven Baltakatei Sandoval | |
50 | # License: GPLv3+ |