Files
2023-05-25 01:05:57 +05:45

175 lines
4.3 KiB
Bash
Executable File

#!/bin/bash
rofi_command="rofi -theme"
time=$(date +%Y-%m-%d-%H-%M-%S)
geometry=$(xrandr | head -n1 | cut -d',' -f2 | tr -d '[:blank:],current')
dir="$(xdg-user-dir VIDEOS)/Screenrecords"
file="Capture_$time.mp4"
timer_icon="$HOME/.config/bspwm/assets/icons/timer.svg"
[ ! -d $dir ] && mkdir -p $dir
notify_user () {
if [[ -e $dir/$file ]]; then
notify-send -u low -a Screenrecorder "Saved in $dir"
else
notify-send -u -a Screenrecorder -i ~/.config/bspwm/assets/icons/cancel.svg "Video Deleted"
fi
}
countdown () {
for sec in `seq $1 -1 1`; do
notify-send -u low -a Clock -i $timer_icon -t 1000 "Countdown" "Starting in : $sec"
sleep 1
done
}
capture () {
countdown '3'
sleep 1
if [[ $1 == "noaudio" ]]; then
ffmpeg -video_size $geometry -framerate 25 -f x11grab -i :0.0+0,0 $dir/$file
else
ffmpeg -video_size $geometry -framerate 25 -f x11grab -i :0.0+0,0 -f pulse -ac 2 -i default $dir/$file
fi
notify_user
}
capture_area () {
area_data=$(slop -f "%x %y %w %h %g %i") || exit 1
read -r X Y W H G ID < <(echo $area_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
}
capture_timer () {
confirm=$($HOME/.config/rofi/bin/confirm 'Set a number')
confirm_config="$HOME/.config/rofi/rasi/confirm.rasi"
if [[ $confirm =~ ^[0-9]+$ ]]; then
countdown $confirm
if [[ $1 == "noaudio" ]]; then
ffmpeg -video_size $geometry -framerate 25 -f x11grab -i :0.0+0,0 $dir/$file
else
ffmpeg -f x11grab -r 30 -s $(xdpyinfo | grep dimensions | awk '{print $2;}') -i :0.0 -f pulse -i alsa_output.pci-0000_00_1f.3.analog-stereo.monitor $dir/$file
fi
notify_user
else
$rofi_command $confirm_config -e "Please input a Number"
fi
}
capture_rofi () {
config="$HOME/.config/rofi/rasi/screenutils.rasi"
capture="󰇄"
area="󰊓"
timer="󰔛"
stop=""
withaudio="󰕾"
withoutaudio="󰖁"
options="$capture\n$area\n$timer\n$stop"
audio_options="$withaudio\n$withoutaudio"
chosen=$(echo -e $options | $rofi_command $config -p 'Take Screenshot' -dmenu -selected-row 0 -theme-str 'listview {lines: 4;}')
audio_chooser () {
audio_chosen=$(echo -e $audio_options | $rofi_command $config -p 'Choose' -dmenu -selected-row 0 -theme-str 'listview {lines: 2;}')
if [[ $chosen == $capture ]]; then
case $audio_chosen in
$withaudio)
capture
;;
$withoutaudio)
capture noaudio
;;
esac
elif [[ $chosen == $area ]]; then
case $audio_chosen in
$withaudio)
capture_area
;;
$withoutaudio)
capture_area noaudio
;;
esac
elif [[ $chosen == $timer ]]; then
case $audio_chosen in
$withaudio)
capture_timer
;;
$withoutaudio)
capture_timer noaudio
;;
esac
fi
}
case $chosen in
$capture)
audio_chooser
;;
$area)
audio_chooser
;;
$timer)
audio_chooser
;;
$stop)
[ `pidof ffmpeg` ] && pkill ffmpeg
;;
esac
}
docs () {
echo "
Usage: screenrecord [Options]
Options:
capture - Record the desktop
capture-noaudio - Record the desktop without audio
capture-area - Record the selected area
capture-area-noaudio - Record the selected area without audio
capture-timer - Set a custom timer
capture-timer-noaudio - Set a custom timer without audio
capture-rofi - Launcher of recording
capture-stop - Stop the recorder
"
}
case $1 in
capture)
capture
;;
capture-area)
capture_area
;;
capture-noaudio)
capture noaudio
;;
capture-area-noaudio)
capture_area noaudio
;;
capture-timer)
capture_timer
;;
capture-timer-noaudio)
capture_timer noaudio
;;
capture-rofi)
capture_rofi
;;
capture-stop)
[ `pidof ffmpeg` ] && pkill ffmpeg
;;
--help)
docs
;;
esac