Various updates

This commit is contained in:
2022-07-06 01:12:38 +05:30
parent 8ee68260ee
commit 59a4b83765
7 changed files with 92 additions and 68 deletions
+53 -32
View File
@@ -1,5 +1,19 @@
#!/usr/bin/env bash
THIS_DIR=$(dirname $(readlink -f $0))
THIS_FILE=$0
# Maximum allowed length of function name. longer names will break tabular display
MAX_FN_NAME_LEN=30
# Maximum number of documentation lines
MAX_DOC_LINES=3
# list all available commands
list-commands(){
typeset -F | cut -d ' ' -f 3 | grep -v '^_' | sort
}
# list available fonts for a language.
# Usage: THIS_FN <lang_code>
fonts_for_lang(){
fc-list :lang=$1
}
@@ -17,19 +31,22 @@ sshInTabs(){
done
}
# Edit this file
edit(){
${EDITOR:-vim} ~/.local/Apps/daily-utils/bin/hari-tools.sh
}
# convert text to 8k wav
# convert text to 8k 1ch wav
genSound(){ echo $1 | espeak --stdout | ffmpeg -i - -ar 8000 -y $2.wav ; }
# Clear SysRq-r if enabled
clearSysRq(){
sudo kbd_mode -s -C /dev/tty7
}
# Print current public ip using ipify API
myIp(){
curl 'https://api.ipify.org?format=json'
}
@@ -75,6 +92,7 @@ block_dev_to_vmdk(){
# Decode sha256 id shown in ssh log
ssh-sha256-decode(){ awk '{print $2}' $1 | base64 -d | sha256sum -b | awk '{print $1}' | xxd -r -p | base64 ; }
# Git clone project into Downloads directory, and keep copy of the same as archive
githubdl(){
cd ~/Downloads
git clone $1
@@ -83,17 +101,17 @@ githubdl(){
mksquashfs ./$projName $projName.sqfs
}
# Uniq command awk version
uniq(){
awk '!array[$0]++'
}
# Convert video webm format ( optional 2 pass encoding )
video_to_webm(){
src="$(readlink -f "$1")"
dest="$(readlink -f "$2")"
deadline=good
cpu_param='--cpu-used=16'
# cpu_param=''
# deadline=best
CODEC=${CODEC:-vp8}
framesCount=$(ffmpeg -i "$src" -vcodec copy -acodec copy -f null /dev/null 2>&1 | grep 'frame=' | sed 's/frame= *\([0-9]*\).*/\1/' )
echo "Frames count = $framesCount . If speed=10 fps, it will take $( python -S -c 'print("%2.2f" % ('$framesCount'/10.0/60))' ) minutes"
@@ -105,40 +123,19 @@ video_to_webm(){
ffmpeg -i "$src" -f yuv4mpegpipe - 2>/dev/null | vpxenc ${cpu_param} --codec=$CODEC -p 2 --${deadline} -o "$dest" --fpf="$pass1File" --pass=2 /dev/stdin
rm $pass1File
fi
# tmpFile=$(date +%s).webm
# tmpdir=~/.cache/hari-utils/video_to_webm
# mkdir -p $tmpdir
# rm $tmpdir/*
# cd $tmpdir
# echo "Running first pass ..."
# ffmpeg -i "$src" -c:v libvpx-vp9 -pass 1 -b:v 1000K -threads 8 -speed 4 \
# -tile-columns 6 -frame-parallel 1 \
# -an -f webm /dev/null
#
# echo "Now Second pass ..."
# ffmpeg -i "$src" -c:v libvpx-vp9 -pass 2 -b:v 1000K -threads 8 -speed 1 \
# -tile-columns 6 -frame-parallel 1 -auto-alt-ref 1 -lag-in-frames 25 \
# -c:a libopus -b:a 64k -f webm "$tmpFile"
# mv "$tmpFile" "$dest"
}
# Record desktop to h264 mp4 using ffmpeg
record_desktop(){
# ffmpeg -report -f x11grab -draw_mouse 1 -framerate 10 -video_size 1600x900 \
# -i :0+0,0 -f alsa -ac 2 -i hw:0,0 -pix_fmt yuv420p -c:v h264 -c:a libmp3lame \
# -q:v 1 -s 1600x900 -f mp4 ~/Videos/myscreencast-$(date +%F_%T).mp4
ffmpeg -vaapi_device /dev/dri/renderD128 -f x11grab -draw_mouse 1 -video_size 1600x900 \
-i :0 -f alsa -ac 2 -i hw:0,0 -vf 'hwupload,scale_vaapi=format=nv12' -c:v h264_vaapi -qp 32 ~/Videos/myscreencast-$(date +%F_%T).mp4
}
list_all_commands(){
typeset -F | cut -d ' ' -f 3 | grep -v '^_'
}
# Bulk replace string in all files in the directory
bulk_replace(){
set -u
old=$1
new=$2
ag -l "$old" | xargs -l sed -i "s/${old}/${new}/g"
@@ -146,6 +143,7 @@ bulk_replace(){
}
# Import csv file into postgres table by autogenerating table and column names
psql_csv_table(){
local db=$1
shift
@@ -170,6 +168,7 @@ EOF
cat "$src" | psql "$@" $db -c "COPY \"$tbl\"( $( echo $cols | sed -E -e "s/'/\"/g" -e 's/([^,]*)/\1/g' ) ) FROM STDIN CSV HEADER"
}
# Swap two files
swap() {
local TMPFILE=tmp.$$;
mv "$1" $TMPFILE;
@@ -177,22 +176,44 @@ swap() {
mv $TMPFILE "$2";
}
# Reload kwin Compositor
kwinCompositorReload(){
qdbus-qt5 org.kde.KWin /Compositor suspend
qdbus-qt5 org.kde.KWin /Compositor resume
}
# Setup autocomplete. run eval "$(THIS_FILE setup-autocomplete)"
setup-autocomplete(){
cat<<EOF
_complete_hdutils(){
saveIFS=\$IFS
IFS=\$'\n'
case \$COMP_CWORD in
1)
COMPREPLY=( \$( compgen -W "\$( $THIS_FILE list-commands )" -- "\${COMP_WORDS[COMP_CWORD]}") )
;;
*)
COMPREPLY=( \$( compgen -o default -- "\${COMP_WORDS[COMP_CWORD]}") )
;;
esac
IFS="\$saveIFS"
return 0
}
complete -F _complete_hdutils $THIS_FILE
EOF
}
cmd=$1
shift
allFunctions=$(list_all_commands | tr '\n' ' ')
allFunctions=$(list-commands | tr '\n' ' ')
if [ -n "$cmd" ] && [[ " $allFunctions " =~ " $cmd " ]]; then
$cmd "$@"
else
cat<<EOF
cat<<EOF
Available commands:
$( list_all_commands | sed 's/^/\t/g' | sort )
$( list-commands | xargs -I@@ bash -c 'tabs '$MAX_FN_NAME_LEN'; \
echo -en @@\\t; grep -B'$MAX_DOC_LINES' -A0 @@\(\) '$THIS_FILE' | grep "^#" | sed "s#THIS_FILE#'$THIS_FILE'#g; s#THIS_FN#@@#g;" | sed ":a; N; \$!ba; s/\n/\n\t/g;" ' )
EOF
fi