13 Commits

+255 -9
View File
@@ -9,6 +9,8 @@ export PATH="$PATH:~/bin-shared:~/.bin-shared"
# PS1 Colors # # PS1 Colors #
colors=`tput colors`
if (( colors >= 256 )); then
export PURPLE="`tput setaf 55`" export PURPLE="`tput setaf 55`"
export ORANGE="`tput setaf 208`" export ORANGE="`tput setaf 208`"
export GREEN="`tput setaf 34`" export GREEN="`tput setaf 34`"
@@ -18,6 +20,28 @@ export SCARLET="`tput setaf 160`"
export YELLOW="`tput setaf 226`" export YELLOW="`tput setaf 226`"
export GRAY="`tput setaf 243`" export GRAY="`tput setaf 243`"
elif (( colors == 16 )); then
export PURPLE="`tput setaf 13`"
export ORANGE="`tput setaf 11`"
export GREEN="`tput setaf 02`"
export RED="`tput setaf 09`"
export SCARLET="`tput setaf 01`"
export YELLOW="`tput setaf 11`"
export GRAY="`tput setaf 08`"
else
export PURPLE="`tput setaf 05`"
export ORANGE="`tput setaf 03`"
export GREEN="`tput setaf 02`"
export RED="`tput setaf 05`"
export SCARLET="`tput setaf 01`"
export YELLOW="`tput setaf 03`"
export GRAY="`tput setaf 07`"
fi
export RESET="`tput sgr0`" export RESET="`tput sgr0`"
export BOLD="`tput bold`" export BOLD="`tput bold`"
@@ -37,14 +61,15 @@ alias l='ls '
alias ll='ls -alh ' alias ll='ls -alh '
alias lh='ls -ash ' alias lh='ls -ash '
function cl { function clones {
export CLONES_PATH="$HOME/Clones"
if [[ -d /sdcard ]]; then if [[ -d /sdcard ]]; then
cd /sdcard/Library/Clones export CLONES_PATH="/sdcard/Library/Clones"
else
cd $HOME/Clones
fi fi
mkdir -pv "$CLONES_PATH"
cd "$CLONES_PATH"
} }
alias clones="cl" alias cl="clones"
alias cdl="cl" alias cdl="cl"
alias cdc="cl" alias cdc="cl"
@@ -249,20 +274,42 @@ function blog { echo -e "\n\n$1\n\n"; }
function pull { function pull {
if [[ -d .git ]]; then if [[ -d .git ]]; then
echo "Recognized git project, pulling latest changes."
git pull --recurse-submodules git pull --recurse-submodules
else else
echo "Not a git repo, attempting to sync with SFTP server."
pull-clone pull-clone
fi fi
} }
function push { function push {
if [[ -d .git ]]; then if [[ -d .git ]]; then
echo "Recognized git project, promoting branch to stage and prod."
git push && eval load-stage && eval load-prod git push && eval load-stage && eval load-prod
else else
echo "Not a git repo, attempting to sync with SFTP server."
send-master send-master
fi fi
} }
function set-variable {
var="$1"
val="$2"
echo -n "export $var=\"$val\" - "
export $var="$val"
status="$?"
if [[ "$val" == "${!var}" ]]; then
echo "Success!"
return 0
fi
echo "Failed with status '$status', $var is '${!var}'."
return $status
}
alias set-var="set-variable "
# Enhance Bin Scripts # # Enhance Bin Scripts #
# MASTER and CLONE folders. # MASTER and CLONE folders.
@@ -420,26 +467,51 @@ function process-video {
if [[ -z $size ]]; then if [[ -z $size ]]; then
size="720" size="720"
fi fi
size="-filter:v scale=-1:$size" # Lanczos is good for upscaling, but this is usually used for downscaling.
if [[ ! -z "$PV_VERTICAL_ASPECT_RATIO" ]]; then
size="-filter:v scale=$size:-1" #:flags=lanczos"
else
size="-filter:v scale=-1:$size" #:flags=lanczos"
fi
if [[ -z $passes ]]; then if [[ -z $passes ]]; then
passes=1 passes=1
fi fi
pass="" pass=""
if [[ $passes != 1 ]]; then if [[ $passes != 1 || ! -z "$PV_2PASS" ]]; then
passes=2 passes=2
pass="-pass 2" pass="-pass 2"
fi fi
v2=""
if [[ ! -z "$PV_V2" ]]; then
v2="-crf 18 -preset veryslow -c:a aac -ar 48000"
#-profile:v high - Letting ffmpeg use the default profile.
fi
time=""
if [[ ! -z "$PV_TIME" ]]; then
time="`which time`"
fi
quiet="-hide_banner -loglevel level+warning"
if [[ ! -z "$PV_PROGRESS" ]]; then
quiet="-hide_banner -loglevel level+info"
fi
if [[ ! -z "$PV_VERBOSE" ]]; then
quiet="-loglevel level+verbose"
fi
## Main ## ## Main ##
# More information on two-pass processing with ffmpeg # More information on two-pass processing with ffmpeg
# https://cinelerra-gg.org/download/CinelerraGG_Manual/Two_pass_Encoding_with_FFmp.html # https://cinelerra-gg.org/download/CinelerraGG_Manual/Two_pass_Encoding_with_FFmp.html
if [[ $passes == 2 ]]; then if [[ $passes == 2 ]]; then
set -x set -x
ffmpeg -nostdin -hide_banner -loglevel quiet \ $time ffmpeg -nostdin $quiet \
-i "$file" $size $video $audio \ -i "$file" $size $video $audio \
-filter:a "dynaudnorm=f=33:g=65:p=0.66:m=33.3" \ -filter:a "dynaudnorm=f=33:g=65:p=0.66:m=33.3" \
-vcodec libx264 -movflags +faststart \ -vcodec libx264 -movflags +faststart \
$v2 \
-pass 1 -f mp4 /dev/null -y -pass 1 -f mp4 /dev/null -y
status=$? status=$?
set +x set +x
@@ -451,10 +523,11 @@ function process-video {
fi fi
set -x && set -x &&
ffmpeg -nostdin -hide_banner -loglevel quiet \ $time ffmpeg -nostdin $quiet \
-i "$file" $size $video $audio \ -i "$file" $size $video $audio \
-filter:a "dynaudnorm=f=33:g=65:p=0.66:m=33.3" \ -filter:a "dynaudnorm=f=33:g=65:p=0.66:m=33.3" \
-vcodec libx264 -movflags +faststart \ -vcodec libx264 -movflags +faststart \
$v2 \
$pass "$newfile" $pass "$newfile"
status="$?" status="$?"
set +x set +x
@@ -477,6 +550,13 @@ function process-video {
echo "ERROR: New file not created or has a 0 size." >&2 echo "ERROR: New file not created or has a 0 size." >&2
fi fi
unset PV_VERTICAL_ASPECT_RATIO
unset PV_V2
unset PV_TIME
unset PV_PROGRESS
unset PV_VERBOSE
unset PV_2PASS
echo -e "\n`date` - Finished with status '$status'." echo -e "\n`date` - Finished with status '$status'."
return $status return $status
} }
@@ -484,6 +564,114 @@ alias pv="process-video"
alias fn='basename `pwd`' # Folder Name alias fn='basename `pwd`' # Folder Name
alias qpv='pv ./raw/YouCut*.mp4 `fn`.mp4' # Quick Process Video alias qpv='pv ./raw/YouCut*.mp4 `fn`.mp4' # Quick Process Video
alias set-pv-vertical='set-var PV_VERTICAL_ASPECT_RATIO "y" '
alias set-pv-time='set-var PV_TIME "y" '
alias set-pv-progress='set-var PV_PROGRESS "y" '
alias set-pv-verbose='set-var PV_VERBOSE "y" '
alias set-pv-2pass='set-var PV_2PASS "y" '
alias set-pv-v2='set-var PV_V2 "y" '
alias set-pv-v2='set-var PV_YIFY "y" '
alias set-pv-vert='set-pv-vertical '
alias set-pv2='set-pv-v2; set-pv-2pass; set-pv-progress '
alias pvs='set-pv-vert; pv '
alias pv2='set-pv2; pv '
alias pv2s='set-pv2; set-pv-vert; pv '
alias pvs2='pv2s '
alias qpv2='set-pv2; qpv '
# 20260713 - Attempt at compressing videos as well as done for torrented movies.
function pv-yify {
# ffmpeg -i input.mkv -c:v libx264 -crf 27 -x264-params cabac=1:ref=5:analyse=0x133:me=umh:subme=9:chroma-me=1:deadzone-inter=21:deadzone-intra=11:b-adapt=2:rc-lookahead=60:vbv-maxrate=10000:vbv-bufsize=10000:qpmax=69:bframes=5:direct=auto:crf-max=51:weightp=2:merange=24:chroma-qp-offset=-1:sync-lookahead=2:psy-rd=1.00,0.15:trellis=2:min-keyint=23:partitions=all -c:a aac -ar 44100 -b:a 128k -map 0 output.mp4
input="$1"
output="$2"
ratio="$3"
audio="$4"
if [[ -z "$input" ]]; then
cat <<- EOF
Usage: pv-yify INPUT_FILE [OUTPUT_FILE] [ASPECT_RATIO]
Examples:
- Create file raw.mp4.pv-yify.mp4 without changing aspect ratio:
$ pv-yify raw.mp4
- Compress a video and ensures it is 720p:
$ pv-yify raw.mp4 compressed.mp4 1280:720
- Compress a video ensuring that it is 720 pixels tall:
$ pv-yify raw.mp4 vertical.mp4 720:-1
EOF
fi
if [[ -z "$output" ]]; then
output="$input.pv-yify.mp4"
fi
echo -e "\n`date` - Converting '$input' with YIFY-like compression to '$output'."
if [[ -f "$output" ]]; then
echo -e "\n`date` - Moving '$output' to TRASH."
mv -v "$output" ~/TRASH/
fi
if [[ -n "$ratio" ]]; then
if [[ "$ratio" != *":"* ]]; then
echo "ERROR: Optional ratio parameter needs to be like '-1:720' (horizontal) or '720:-1' (vertical)".
return 1
fi
size="-filter:v scale=$ratio"
fi
if [[ -z "$audio" ]]; then
audio="128k"
fi
echo -e "\n`date` - Starting FFMPEG...\n"
set -x
ffmpeg -i "$input" \
-hide_banner -loglevel level+warning \
-c:v libx264 -crf 27 -c:a aac -ar 44100 -b:a "$audio" -map 0 \
-x264-params cabac=1:ref=5:analyse=0x133:me=umh:subme=9:chroma-me=1:deadzone-inter=21:deadzone-intra=11:b-adapt=2:rc-lookahead=60:vbv-maxrate=10000:vbv-bufsize=10000:qpmax=69:bframes=5:direct=auto:crf-max=51:weightp=2:merange=24:chroma-qp-offset=-1:sync-lookahead=2:psy-rd=1.00,0.15:trellis=2:min-keyint=23:partitions=all \
$ratio \
"$output"
set +x
echo -e "\n`date` - Finished FFMPEG."
echo -e "\n`date` - Syncing and checking file sizes."
sync
sleep 5
ls -lh "$input" "$output"
echo -e "\n`date` - Done!"
}
alias yify="pv-yify "
alias yify-pv="pv-yify "
function set-pv-all {
#set-var PV_VERTICAL_ASPECT_RATIO "y"
set-var PV_V2 "y"
set-var PV_TIME "y"
set-var PV_PROGRESS "y"
set-var PV_VERBOSE "y"
set-var PV_2PASS "y"
}
alias set-pv-everything='set-pv-all '
function unset-pv-all {
unset PV_VERTICAL_ASPECT_RATIO
unset PV_V2
unset PV_TIME
unset PV_PROGRESS
unset PV_VERBOSE
unset PV_2PASS
}
alias unset-pv-everything='unset-pv-all '
# Allow converting video to audio and other smaller # Allow converting video to audio and other smaller
# tasks than what process-video is intended to do. # tasks than what process-video is intended to do.
function basic-process-usage { function basic-process-usage {
@@ -662,6 +850,64 @@ alias exec-html="run-site"
alias site-host="run-site" alias site-host="run-site"
alias host-site="run-site" alias host-site="run-site"
# TBD: Move this to a different section?
function git-check {
dir="`pwd`"
if [[ -n "$1" ]]; then
dir="$1"
fi
echo "Checking '$dir' for git changes."
ls -d "$dir"/* | while read project; do
if [[ ! -d $project ]]; then
continue
fi
echo -e "\n*** `basename $project` ***"
cd $project
if [[ -d .git ]]; then
git ls-remote --exit-code --heads origin dev
dev_exists="$?"
if [[ "$dev_exists" == 0 ]]; then
git switch dev
elif [[ "$dev_exists" == 2 ]]; then
git switch main
else
echo "ERROR: Unknown status for dev_exists, '$dev_exists'."
continue
fi
git pull
git push
else
echo "Not a Git project, skipping!"
fi
done
echo -e "\nDone!"
}
# TBD: Move this to a different section?
function check-colors {
min=0
max=256
unset i
echo "Current terminal supports '`tput colors`' colors."
echo "Displaying examples..."
for (( i = min; i <= max; i++ )); do
tput setaf $i
printf "%03d" "$i"
tput sgr0
if (( i < max )); then
printf " "
fi
done
printf "\n"
}
alias color-check="check-colors"
alias show-colors="check-colors"
alias test-colors="check-colors"
alias colors="check-colors"
alias term-colors="check-colors"
alias display-colors="check-colors"
## Finalize ## ## Finalize ##