archcraft-openbox/files/pipemenus/ac-record

91 lines
2.3 KiB
Bash
Executable File

#!/usr/bin/env bash
## Copyright (C) 2020-2023 Aditya Shakya <adi1090x@gmail.com>
##
## Openbox Pipemenu to Record Screen with slop and ffmpeg
# Variables and functions
MENUS_LIBDIR='/usr/share/archcraft/openbox/menulib'
if ! . "$MENUS_LIBDIR/archcraft.cfg" 2> /dev/null; then
echo "Error: Failed to locate archcraft.cfg in $MENUS_LIBDIR" >&2
exit 1
fi
# File
time=`date +%Y-%m-%d-%H-%M-%S`
screen=`xrandr | grep 'current' | head -n1 | cut -d',' -f2 | tr -d '[:blank:],current'`
dir="`xdg-user-dir VIDEOS`/Screenrecorder"
file="Capture_${time}.mp4"
# Directory
if [[ ! -d "$dir" ]]; then
mkdir -p "$dir"
fi
# notify
notify_user () {
notify_cmd="dunstify -u low -h string:x-dunst-stack-tag:obscreenrecord -i /usr/share/archcraft/icons/dunst/video.png"
if [[ -e "$dir/$file" ]]; then
${notify_cmd} "Saved in $dir"
else
${notify_cmd} "Video Deleted."
fi
}
# countdown
countdown () {
for sec in `seq $1 -1 1`; do
dunstify -t 1000 -h string:x-dunst-stack-tag:screenrecordtimer -i /usr/share/archcraft/icons/dunst/timer.png "Starting in : $sec"
sleep 1
done
}
# capture
rec_screen() {
countdown '3'
sleep 1
if [[ "$1" == "noaudio" ]]; then
ffmpeg -video_size ${screen} -framerate 25 -f x11grab -i :0.0+0,0 ${dir}/${file}
else
ffmpeg -video_size ${screen} -framerate 25 -f x11grab -i :0.0+0,0 -f pulse -ac 2 -i default ${dir}/${file}
fi
notify_user
}
rec_area() {
get_win_data=$(slop -f "%x %y %w %h %g %i") || exit 1
read -r X Y W H G ID < <(echo $get_win_data)
countdown '3'
sleep 1
if [[ "$1" == "noaudio" ]]; then
ffmpeg -video_size ${W}x${H} -framerate 25 -f x11grab -i :0.0+${X},${Y} ${dir}/${file}
else
ffmpeg -video_size ${W}x${H} -framerate 25 -f x11grab -i :0.0+${X},${Y} -f pulse -ac 2 -i default ${dir}/${file}
fi
notify_user
}
if [[ "$1" == "--screen" ]]; then
rec_screen
elif [[ "$1" == "--area" ]]; then
rec_area
elif [[ "$1" == "--screen-na" ]]; then
rec_screen noaudio
elif [[ "$1" == "--area-na" ]]; then
rec_area noaudio
else
menuStart
if [[ `pidof ffmpeg` ]]; then
menuItem 'Stop Screen Recorder' "pkill ffmpeg"
menuSeparator
fi
menuItem 'Record Desktop (With Audio)' "$0 --screen"
menuItem 'Record Desktop (No Audio)' "$0 --screen-na"
menuItem 'Record Area (With Audio)' "$0 --area"
menuItem 'Record Area (No Audio)' "$0 --area-na"
menuEnd
fi
exit 0