]> zdv2.bktei.com Git - BK-2020-03.git/commitdiff
Merge remote-tracking branch 'zdv2/develop' into develop develop
authorSteven Baltakatei Sandoval <baltakatei@gmail.com>
Thu, 3 Sep 2026 22:45:21 +0000 (22:45 +0000)
committerSteven Baltakatei Sandoval <baltakatei@gmail.com>
Thu, 3 Sep 2026 22:45:21 +0000 (22:45 +0000)
user/mp4_make_480.sh [moved from user/mp4_make480.sh with 76% similarity, mode: 0755]
user/mp4_make_small.sh [new file with mode: 0755]

old mode 100644 (file)
new mode 100755 (executable)
similarity index 76%
rename from user/mp4_make480.sh
rename to user/mp4_make_480.sh
index 8799a2e..9d23f77
@@ -5,33 +5,34 @@
 #        arg2  dir  output dir (optional)
 # Output: dir   ./out/
 #         file  ./out/[files]_480.mp4
-# Version: 0.1.2
+# Version: 0.1.6
 # Depends: GNU parallel 20161222, ffmpeg 4.3.6-0
 # Ref/Attrb: [1]: FFmpeg wiki: https://trac.ffmpeg.org/wiki/Scaling
 declare -g dir_in dir_out;
 
 check_input() {
     dir_in="$1";
+    if [[ ! -d "$dir_in" ]]; then echo "FATAL:Not a dir:$dir_in" 1>&2; exit 1; fi;
     if [[ $# -le 0 ]]; then echo "FATAL:Insufficient args:$#" 1>&2; exit 1; fi;
     if [[ $# -eq 2 ]]; then
         dir_out="$2";
     else
-        dir_out="./out_480";
+        dir_out="${dir_in}/out_480";
     fi;
     export dir_out;
-    if [[ ! -d "$dir_in" ]]; then echo "FATAL:Not a dir:$dir_in" 1>&2; exit 1; fi;
+    
     mkdir -p "$dir_out";
     declare -p dir_in dir_out;  # debug
 };
 convert_video() {
     find "$dir_in" -mindepth 1 -maxdepth 1 -type f -iname "*.mp4" | \
-        parallel job_ffmpeg "{}" "$path_out";
+        parallel -j25% job_ffmpeg "{}" "$path_out";
 };
 job_ffmpeg() {
     path_in="$1";
     path_out="$2";
     file_in="$(basename "$path_in")";
-    path_out=./"$dir_out"/"${file_in%.mp4}"_480.mp4;
+    path_out="${dir_out}/${file_in%.[mM][pP]4}"_480.mp4;
     opt_scale="scale=-2:480";  # See [1]
     declare -p path_in path_out file_in dir_out path_out opt_scale;
     ffmpeg -nostdin -i "$path_in" -vf "$opt_scale" "$path_out";
@@ -39,8 +40,13 @@ job_ffmpeg() {
 export -f job_ffmpeg;
 
 main() {
+    SECONDS=0;
+    ti="$(date -Is)";
     check_input "$@";
     convert_video;
+    tf="$(date -Is)";
+    printf "%s\n" "STATUS:Finished in $SECONDS seconds with status $?.";
+    printf "%s\n%s\n%s\n" "STATUS:Job start and end times:" "$ti" "$f";
 };
 
 main "$@";
diff --git a/user/mp4_make_small.sh b/user/mp4_make_small.sh
new file mode 100755 (executable)
index 0000000..fbe79e2
--- /dev/null
@@ -0,0 +1,55 @@
+#!/bin/bash
+# Desc: Reèˆncodes .mp4 videos in a specified directory to reduce size.
+# Usage: mp4_make480.sh [dir in] [dir out]
+# Input: arg1  dir  input dir
+#        arg2  dir  output dir (optional)
+# Output: dir   ./out/
+#         file  ./out/[files]_small.mp4
+# Version: 0.0.3
+# Depends: GNU parallel 20231122, ffmpeg 6.1.1
+# Ref/Attrb:
+declare -g dir_in dir_out;
+
+check_input() {
+    dir_in="$1";
+    if [[ ! -d "$dir_in" ]]; then echo "FATAL:Not a dir:$dir_in" 1>&2; exit 1; fi;
+    if [[ $# -le 0 ]]; then echo "FATAL:Insufficient args:$#" 1>&2; exit 1; fi;
+    if [[ $# -eq 2 ]]; then
+        dir_out="$2";
+    else
+        dir_out="${dir_in}/out_small";
+    fi;
+    export dir_out;
+    
+    mkdir -p "$dir_out";
+    declare -p dir_in dir_out;  # debug
+};
+convert_video() {
+    find "$dir_in" -mindepth 1 -maxdepth 1 -type f -iname "*.mp4" | \
+        parallel -j25% job_ffmpeg "{}" "$path_out";
+};
+job_ffmpeg() {
+    path_in="$1";
+    path_out="$2";
+    file_in="$(basename "$path_in")";
+    path_out="${dir_out}/${file_in%.[mM][pP]4}"_small.mp4;
+
+    declare -p path_in path_out file_in dir_out path_out;
+    ffmpeg -nostdin -i "$path_in" -c:v libx264 -preset veryslow -crf 26 -pix_fmt yuv420p "$path_out";
+};
+export -f job_ffmpeg;
+
+main() {
+    SECONDS=0;
+    ti="$(date -Is)";
+    check_input "$@";
+    convert_video;
+    tf="$(date -Is)";
+    printf "%s\n" "STATUS:Finished in $SECONDS seconds with status $?.";
+    printf "%s\n%s\n%s\n" "STATUS:Job start and end times:" "$ti" "$f";
+};
+
+main "$@";
+
+# Author: Steven Baltakatei Sandoval
+# License: GPLv3+