General Release (#1)

* Add two new location shorcuts and a fix for ffmpeg.

* Add comments and a quick commit function.

* More fixes and enhancements.

* Enhance ffmpeg command with resolution changing.

* Try fixing the test function.

* Prevent situations such as possibly deleting a home directory.

* Use dev branch for testing. Add man to software.

* Always accept.

* Do not cd as part of bashrc.

* Try fixing path issue.

* Try fixing PROG from just saying bash.

* More path and PROG fixes.

* Final cleanups. Seems good now.

* test-termux works great now!

* Add aliases for reloading the Termux config project (this Git repo).

* Add missing slash.

* Fix double flagging bitrates.

* Show the ffmpeg command. Print file sizes.

Planning to come back later with a laptop and clean up tabs vs spaces. Difficult to manage on a phone.

* Move input to be before options.

* Fix filter parameters.

* Remove single quotes.

* Fix typos.

* Add more shortcut aliases.

* Add more packages.

* Update instructions and mention shortcut aliases.

* Fix extra period.

* Add more aliases.

* Add extra detail to final instruction.

* Better formatting on new text.

* Add aliases, fix spaces to tabs.

* Change order of parameters so that size is first.

* Add wget to default packages.

* Add two-pass processing.

* More changes for 2-pass.

* Add ability to still do 1 pass. Add sync before filesize check. Clean 2-pass files.

* Add better chance of getting correct filesize with a sleep. Make ffmpeg 2 pass file name more explicit.

* Change to maxrate from b:v so that ffmpeg can determine the best rate per frame.

* First attempt at adding basic-process for a more flexible ffmpeg experience.

* Multiple bugfixes and enhancements for video functions.

* Only remove first pass files if everything succeeded. Sleep before doing IF for file size.
This commit is contained in:
Hyperling 2024-03-23 19:03:39 -07:00 committed by GitHub
parent f1887073ec
commit 6a9f363771
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 264 additions and 67 deletions

View File

@ -22,8 +22,8 @@ Hyperling's scripts for a productive Termux environment.
chmod 755 *.sh
```
1. Make any modifications to the env.example file
- Only if you do not already have a ~/.env file
1. Make any modifications to the env.example file.
- Only if you do not already have ~/.env already.
1. Run the deployment script.
@ -31,12 +31,14 @@ Hyperling's scripts for a productive Termux environment.
./setup.sh
```
1. All done!
1. All done. Be sure to source your new `.bashrc`!
# Updates
Each program is developed to be run numerous times, so all that needs done is following the Install instructions again.
Shortcuts for this exist after the initial install, such as running `termux-reload` then `bash-reload`.
# Development
Since the project self-destructs, it is recommended to copy the folder for each run, then execute the copied files.
@ -47,3 +49,5 @@ cd ~/termux-copy
chmod 755 *.sh
./setup.sh
```
Or use the `test-termux` command if the project is already loaded.

268
bashrc.sh
View File

@ -14,73 +14,257 @@ else
alias prod="echo 'ERROR: .env not set up properly, please fix and reload RC.'"
fi
# Easily get to storage device.
export SS="~/storage/shared/"
# Quickies
alias reload-bash="source ~/.bashrc"
alias bash-reload="reload-bash"
alias reload="reload-bash"
# Easily get to storage devices.
export SS="~/storage/shared"
alias ss="cd $SS"
alias sd="ss"
alias storage="ss"
alias home="ss"
# Help Prevent Mistakes
# Shortcut to media.
export DCIM="$SS/DCIM/Camera"
alias dcim="cd $DCIM"
# Shortcut to Code
export CODE="$SS/Code"
alias code="cd $CODE"
# Shortcuts for TRASH.
export TRASH="$SS/TRASH"
alias trash="cd $TRASH"
alias clean-trash="bash -c 'rm -rfv $TRASH/*'"
alias trash-clean="clean-trash"
alias check-trash="du -h $TRASH"
alias trash-check="check-trash"
# Help prevent mistakes.
alias cp="cp -v"
alias mv="mv -v"
alias rm="echo 'Move to ~/storage/shared/TRASH/ instead!'"
# Quickies
alias update="pkg update && pkg upgrade"
alias bye="exit"
alias goodbye="update -y && bye"
alias install="pkg install"
## Functions ##
# Optimize the bitrate and audio levels for an edited video.
function process-video-usage {
echo "USAGE: process-video oldFile newFile [videoBitrate] [audioBitrate]"
echo "Call ffmpeg with preferred video posting settings."
echo "USAGE: process-video oldFile newFile [videoBitrate] [audioBitrate] [sizeRating]"
echo -n "Purpose: Call ffmpeg with preferred video posting settings. "
echo -n "Bitrates default to 2000k and 192k, size is 720. "
echo "These work well on Odysee and are fairly small as backups."
echo "Examples:"
echo "- Create a small file for quick streaming."
echo " process-video youcut.mp4 20240210.mp4 1200k 128k 480"
echo "- Create a larger file for something like YouTube."
echo " process-video youcut.mp4 20240210_1080p.mp4 5000k 256k 1080"
}
function process-video {
# Parameters
file="$1"
newfile="$2"
video="$3"
audio="$4"
# Parameters
file="$1"
newfile="$2"
video="$3"
audio="$4"
size="$5"
passes="$6"
# Validations
if [[ -z $file || ! -e $file ]]; then
echo "ERROR: Original file '$file' does not exist." >&2
process-video-usage
return 1
fi
if [[ -z $newfile || -e $newfile ]]; then
echo "ERROR: New file '$newfile' already exists." >&2
process-video-usage
elif [[ -e $newfile ]]; then
echo "ERROR: New file '$newfile' already exists." >&2
# Validations
if [[ -z $file || ! -e $file ]]; then
echo "ERROR: Original file '$file' does not exist." >&2
process-video-usage
return 1
fi
fi
if [[ -z $video ]]; then
video="-b:v 2000k"
else
video="-b:v $video"
fi
if [[ -z $newfile ]]; then
echo "ERROR: New file's name must be provided." >&2
process-video-usage
return 1
elif [[ -e $newfile ]]; then
echo "ERROR: New file '$newfile' already exists." >&2
du -h "$newfile"
process-video-usage
return 1
fi
if [[ -z $audio ]]; then
audio="-b:a 192k"
else
audio="-b:a $audio"
fi
echo "`date` - Converting '$file' to '$newfile'."
echo "`date` - Converting '$file' to '$newfile' using '$video $audio'"
if [[ -z $video ]]; then
video="2000k"
fi
video="-maxrate $video"
# Main
ffmpeg -nostdin -hide_banner -loglevel quiet \
$video $audio -movflags +faststart \
-af "dynaudnorm=f=33:g=65:p=0.66:m=33." \
-i "$file" "$newfile"
if [[ -z $audio ]]; then
audio="192k"
fi
audio="-b:a $audio"
if [[ -z $size ]]; then
size="720"
fi
size="-filter:v scale=-1:$size"
if [[ $passes != 1 ]]; then
passes=2
pass="-pass 2"
fi
## Main ##
# More information on two-pass processing with ffmpeg
# https://cinelerra-gg.org/download/CinelerraGG_Manual/Two_pass_Encoding_with_FFmp.html
if [[ $passes == 2 ]]; then
set -x
ffmpeg -nostdin -hide_banner -loglevel quiet \
-i "$file" $size $video $audio \
-filter:a "dynaudnorm=f=33:g=65:p=0.66:m=33.3" \
-vcodec libx264 -movflags +faststart \
-pass 1 -f mp4 /dev/null -y &&
set +x &&
echo "`date` - Done with the first pass." ||
return 1
fi
set -x &&
ffmpeg -nostdin -hide_banner -loglevel quiet \
-i "$file" $size $video $audio \
-filter:a "dynaudnorm=f=33:g=65:p=0.66:m=33.3" \
-vcodec libx264 -movflags +faststart \
$pass "$newfile"
status="$?"
set +x
echo "`date` - Done with the final pass."
if [[ $passes == 2 && $status == 0 ]]; then
mv -v ffmpeg2pass*.log* ~/TRASH/
fi
sync
sleep 5
if [[ -s $newfile ]]; then
echo "`date` - Getting file sizes."
du -h "$file"
du -h "$newfile"
else
echo "ERROR: New file not created or has a 0 size." >&2
fi
echo -e "\n`date` - Finished with status '$status'."
return $status
}
alias pv="process-video"
cd ~/storage/shared/
# Quickly commit code to a repo.
function commit {
message="$1"
if [[ -z $message ]]; then
echo "ERROR: A message is required." >&2
echo 'USAGE: commit "My commit message."' >&2
return 1
fi
git add . && git commit -m "$message" && git push
}
echo "'$0' completed!"
# Easily test this project after committing changes.
# Otherwise can just source this file unless testing setup.sh.
function test-termux {
sh -c "rm -rf ~/termux-deleteme ~/TRASH/termux-deleteme" 2>/dev/null
git clone https://github.com/Hyperling/Termux ~/termux-deleteme --branch=dev
chmod 755 ~/termux-deleteme/*.sh
~/termux-deleteme/setup.sh
}
alias reload-termux="test-termux"
alias termux-test="test-termux"
alias termux-reload="reload-termux"
# Allow converting video to audio ad other smaller
# tasks than what process-video is intended to do.
function basic-process-usage {
echo "basic-process INPUT OUTPUT NORMALIZE [EXTRA]"
echo -n "Pass a file through ffmpeg with the option"
echo "to easily normalize the audio with a Y."
echo "Examples:"
echo "- Normalize audio on a video."
echo " basic-process video.mp4 normalized.mp4 Y"
echo "- Convert a video to audio at 192k."
echo " basic-process video.mp4 audio.mp3 N '-b:a 192k'"
}
function basic-process {
# Parameters
input="$1"
output="$2"
typeset -u normalize
normalize="$3"
extra="$4"
echo "`date` - Starting basic-process"
# Validations
if [[ -z $input || ! -e $input ]]; then
echo "ERROR: Input file '$input' does not exist." >&2
basic-process-usage
return 1
fi
if [[ -z $output ]]; then
echo "ERROR: Output file's name must be provided." >&2
basic-process-usage
return 1
elif [[ -e $output ]]; then
echo "ERROR: Output file '$output' already exists." >&2
du -h "$output"
basic-process-usage
return 1
fi
if [[ $normalize == "Y" ]]; then
echo "Normalize set to TRUE."
normal="-filter:a dynaudnorm=f=33:g=65:p=0.66:m=33.3"
else
echo "No audio normalization is being done."
fi
# Main
echo "`date` - Converting '$input' to '$output'."
set -x
ffmpeg -nostdin -hide_banner -loglevel quiet \
-i "$input" $extra $normal "$output"
status=$?
set +x
if [[ $status != 0 ]]; then
echo "`date` - WARNING: ffmpeg exited with status '$status'." >&2
fi
# Finish
if [[ ! -s $output ]]; then
echo "`date` - ERROR: Output '$output' not created or has 0 size." >&2
return 1
fi
sync
echo "`date` - '$output' has been created successfully."
sleep 3
du -h "$input"
du -h "$output"
echo "`date` - Finished basic-process"
return 0
}
alias v2a="basic-process"
alias vta="v2a"
alias va="v2a"
alias pa="v2a"
alias fix-audio="basic-process"
# Go to normal storage. DISABLED, use shortcut aliases instead.
#cd ~/storage/shared/
PROG="$(basename -- "${BASH_SOURCE[0]}")"
echo "'$PROG' completed!"

View File

@ -5,4 +5,5 @@ PROD_USER=username
PROD_NAME=example.com
PROD_PORT=2222
echo "'$0' completed!"
PROG="$(basename -- "${BASH_SOURCE[0]}")"
echo "'$PROG' completed!"

View File

@ -1,40 +1,43 @@
# No Shebang For Termux
# 2024-02-10 Hyperling
echo "`date` - Starting Hyperling's Termux Setup"
PROG="$(basename -- "${BASH_SOURCE[0]}")"
echo "`date` - Starting $PROG"
DIR="`dirname $0`"
DIR="$(dirname -- "${BASH_SOURCE[0]}")"
cd $DIR
DIR="`pwd`"
echo "Working in '$DIR'."
echo -e "\n`date` - Upgrade Package Repos"
pkg update &&
pkg upgrade
pkg upgrade -y
echo -e "\n`date` - Check Storage Permission"
if [[ ! -e ~/storage/shared ]]; then
sleep 3
termux-setup-storage
if [[ -e ~/storage/shared/ ]]; then
echo "~/storage/shared/ now exists. :)"
sleep 3
termux-setup-storage
if [[ -e ~/storage/shared/ ]]; then
echo "~/storage/shared/ now exists. :)"
else
echo "ERROR: Something ain't right, Jim! Abort!" >&2
echo "ERROR: Something ain't right, Jim! Abort!" >&2
exit 1
fi
else
echo "Everything looks good already, pal."
echo "Everything looks good already, pal."
fi
echo -e "\n`date` - Install Software"
pkg install \
openssh tsu vim htop git cronie \
nmap traceroute \
ffmpeg
pkg install -y \
openssh tsu vim htop git cronie man \
nmap traceroute wget \
ffmpeg imagemagick \
kotlin php nodejs python libllvm
echo -e "\n`date` - BASH Environment"
if [[ ! -e ~/.env ]]; then
if [[ -e env.example ]]; then
mv -v env.example ~/.env
mv -v env.example ~/.env
else
echo "ERROR: Neither .env or env.example found." >&2
fi
@ -46,7 +49,7 @@ fi
if [[ -e bashrc.sh ]]; then
mv -v bashrc.sh ~/.bashrc
else
echo "ERROR: bashrc.sh not found, skipping." >&2
echo "ERROR: bashrc.sh not found, skipping." >&2
fi
echo -e "\n`date` - Cleanup"
@ -58,16 +61,21 @@ if [[ ! -e ~/storage/shared/TRASH ]]; then
fi
ln -s ~/storage/shared/TRASH ~/TRASH
cd ..
if [[ -n $DIR && $DIR != "/" ]]; then
if [[ -n $DIR && $DIR != "/" && -d .git ]]; then
echo "We are in a git clone, remove the project."
cd ..
mv -v $DIR ~/TRASH/termux-"`date +'%Y%m%d%H%M%S'`" |
grep -v '/.git/'
else
echo "File was used individually, remove it."
mv "$PROG" ~/TRASH/
fi
echo -e "\n*******"
echo "Don't forget to reload your environment!"
echo " source .bashrc"
echo " source ~/.bashrc"
echo "*******"
echo -e "\n`date` - Finished Hyperling's Termux Setup"
PROG="$(basename -- "${BASH_SOURCE[0]}")"
echo -e "\n`date` - Finished $PROG"
exit 0