tileos-settings-sway/usr/share/sway/scripts/recorder.sh

69 lines
1.4 KiB
Bash
Executable file

#!/bin/bash
countdown() {
for count in {3..1}; do
notify "Recording in $count seconds" -t 1000
sleep 1
done
}
notify() {
notify-send \
"$1" \
-i "/usr/share/icons/Yaru/scalable/devices/camera-video-symbolic.svg" \
"${@:2}"
}
kill_waybar() {
pkill -RTMIN+8 waybar
}
kill_recursive() {
ps -o sid= -p "$1" | xargs pkill --signal SIGINT -g
}
cleanup() {
pid=$(cat "$1")
rm "$1"
kill_waybar
kill_recursive "$pid"
exit
}
main() {
pid_file="/tmp/screenrecorder-$UID.pid"
test -e "$pid_file" && cleanup "$pid_file"
echo "$$" > "$pid_file"
target_path=$(xdg-user-dir VIDEOS)
timestamp=$(date +'recording_%Y%m%d-%H%M%S')
notify "Select a region to record" -t 1000
area=$(swaymsg -t get_tree | \
jq -r '.. | select(.pid? and .visible?) | .rect | "\(.x),\(.y) \(.width)x\(.height)"' | \
slurp)
countdown
(sleep 0.5 && kill_waybar) &
if [[ "$1" == "-a" ]]; then
file="$target_path/$timestamp.mp4"
wf-recorder --audio -g "$area" --file="$file"
else
file="$target_path/$timestamp.webm"
output="$(swaymsg -t get_outputs | jq -r '.[] | select(.focused) | .name')"
wf-recorder \
-g "$area" -c libvpx \
--codec-param="qmin=0" \
--codec-param="qmax=25" \
--codec-param="crf=4" \
--codec-param="b:v=1M" \
-o "$output" \
--file="$file"
fi
kill_waybar && notify "Finished recording ${file}"
rm $pid_file
}
main "$@"