feat(us/bk-copy-rand-music.sh):Add misc features
authorSteven Baltakatei Sandoval <baltakatei@gmail.com>
Wed, 19 Jan 2022 05:18:05 +0000 (05:18 +0000)
committerSteven Baltakatei Sandoval <baltakatei@gmail.com>
Wed, 19 Jan 2022 05:18:05 +0000 (05:18 +0000)
- min_file_duration: permits excluding very short audio files
- max_filename_length: permits reducing output file name length for
    filesystem compatibility (e.g. Windows likes names shorter than
    255 characters).
- showUsage(): Update description to indicate that the script copies
    based on whether an audio track is detectable or not.

user/bk-copy-rand-music.sh

index c326e419e35cfd9cfa338f07bac4d758348f14f5..c4e568594aa42eccdaf3a03489376028a9f6208c 100755 (executable)
@@ -1,6 +1,7 @@
 #!/usr/bin/env bash
-# Desc: Copies random music
+# Desc: Copies random audio files
 # Usage: bk-copy-rand-music.sh [dir SOURCE] [dir DEST] [int DURATION]
+# Version: 0.0.2
 
 declare -Ag appRollCall # Associative array for storing app status
 declare -Ag fileRollCall # Associative array for storing file status
@@ -9,7 +10,9 @@ declare -a music_codecs # Array for storing valid codec names (e.g. "aac" "mp3")
 
 # Adjustable parameters
 music_codecs=("vorbis" "aac" "mp3" "flac" "opus"); # whitelist of valid codec_names ffprobe might return
-max_loops=1000000; # max number of files to test whether are audio or not
+max_loops="1000000"; # max number of files to test whether are audio or not
+max_filename_length="255"; # max output filename length
+min_file_duration="10"; # minimum duration per music file
 
 yell() { echo "$0: $*" >&2; } # print script path and all args to stderr
 die() { yell "$*"; exit 111; } # same as yell() but non-zero exit status
@@ -178,8 +181,8 @@ showUsage() {
     cat <<'EOF'
 
     DESCRIPTION:
-      This script may be used to copy a random selection of files from
-      SOURCE to DEST.
+      This script may be used to copy a random selection of files containing
+      audio tracks from SOURCE to DEST.
 
     USAGE:
       bk-copy-rand-music [dir SOURCE] [dir DEST] [int DURATION]
@@ -431,6 +434,7 @@ main() {
        dur_cand="$(get_media_length "$path_candfile")";
        dur_cand="${dur_cand%%.*}"; # convert float to int
        if ! checkInt "$dur_cand"; then continue; fi; # reject
+       if [[ "$dur_cand" -lt "$min_file_duration" ]]; then continue; fi; # reject
 
        ### Add/update candfile to list_copy assoc. array (key=path; value=duration)
        #yell "DEBUG:Adding $path_candfile";
@@ -457,8 +461,12 @@ main() {
        ## Get 16-character b2sum fingerprint (for different files that share basename)
        fingerprint="$(b2sum -l64 "$key" | cut -d' ' -f1)";
 
+       ## Form output filename
+       file_name="$fingerprint".."$file_basename";
+       file_name="${file_name:0:$max_filename_length}"; # Limit filename length (e.g. Windows has max of 255 characters)
+
        ## Form output path
-       path_output="$dir_dest"/"$fingerprint".."$file_basename";
+       path_output="$dir_dest"/"$file_name";
        
        ## Copy
        try cp "$key" "$path_output" && yell "NOTICE:Copied ($value seconds): $key ";