76 lines
1.9 KiB
Bash
Executable File
76 lines
1.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# This script allows one to record a slected area of the screen.
|
|
# Calling the script again will end recording, and save the file to
|
|
# ~/Videos/screen captures/$(date +%F_%T).mp4
|
|
|
|
# create directory if necessary
|
|
mkdir -p ~/Videos/screen\ captures
|
|
|
|
# variables
|
|
record_file="/tmp/record_file"
|
|
now="$(date +%F_%T)"
|
|
file="$HOME/Videos/screen captures/$now.mp4"
|
|
|
|
|
|
stop_recording () {
|
|
kill -2 "$(head -1 $record_file)"
|
|
kill -KILL "$(head -2 $record_file | tail -n1 )"
|
|
old_date="$(cat $record_file | tail -n1)"
|
|
rm "$record_file"
|
|
|
|
# notif
|
|
dunstify -u low \
|
|
-a Record \
|
|
-r 8827 \
|
|
-i ~/.icons/candy-icons/apps/scalable/simplescreenrecorder.svg \
|
|
"Saved recording to $old_date.mp4"
|
|
echo "Saved recording to $old_date.mp4"
|
|
}
|
|
|
|
|
|
start_recording () {
|
|
case "$XDG_SESSION_TYPE" in
|
|
x11)
|
|
# get coordinates
|
|
slop=$(slop -f "%x %y %w %h %g %i") || exit 1
|
|
read -r X Y W H G ID <<< "$slop"
|
|
|
|
# record screen
|
|
ffmpeg -v 1 -r 30 -f x11grab -s "$W"x"$H" -i :0.0+"$X","$Y" -show_region 1 -vf "scale=2*trunc(iw/2):2*trunc(ih/2)" -vcodec libx264 -pix_fmt yuv420p -preset ultrafast -crf 18 -threads 0 "$file" -y &
|
|
;;
|
|
wayland)
|
|
# get coordinates
|
|
if ! slurp="$(slurp)"; then
|
|
exit
|
|
fi
|
|
wf-recorder -g "$slurp" -f "$file" --framerate 30 &
|
|
;;
|
|
*)
|
|
dunstify -t 2000 -u low -i ~/.icons/candy-icons/apps/scalable/camorama.svg "This session type is not supported by record.sh"
|
|
exit
|
|
;;
|
|
esac
|
|
|
|
# print metadata to tmp file
|
|
echo $! > "$record_file"
|
|
echo $$ >> "$record_file"
|
|
echo "$now" >> "$record_file"
|
|
|
|
|
|
# loop notif
|
|
i=0
|
|
while :; do
|
|
i=$(($i + 1))
|
|
dunstify -u low \
|
|
-a Record \
|
|
-r 8827 \
|
|
-i ~/.icons/candy-icons/apps/scalable/simplescreenrecorder.svg \
|
|
"Recording for $(date -d@$i -u +%H:%M:%S)"
|
|
sleep 1
|
|
done
|
|
}
|
|
|
|
|
|
[[ -e "$record_file" ]] && stop_recording || start_recording
|