From: Steven Baltakatei Sandoval Date: Thu, 3 Sep 2026 22:45:21 +0000 (+0000) Subject: Merge remote-tracking branch 'zdv2/develop' into develop X-Git-Url: https://zdv2.bktei.com/gitweb/BK-2020-03.git/commitdiff_plain/refs/heads/develop?hp=b2e99572cf78bc92e53f065a35cebacea7c6692c Merge remote-tracking branch 'zdv2/develop' into develop --- diff --git a/user/mp4_make480.sh b/user/mp4_make_480.sh old mode 100644 new mode 100755 similarity index 76% rename from user/mp4_make480.sh rename to user/mp4_make_480.sh index 8799a2e..9d23f77 --- a/user/mp4_make480.sh +++ b/user/mp4_make_480.sh @@ -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 index 0000000..fbe79e2 --- /dev/null +++ b/user/mp4_make_small.sh @@ -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+