[screenrecord.sh] Add screen recording script.
This commit is contained in:
parent
913c76b3f9
commit
019da41413
|
@ -0,0 +1,78 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# This script is Public Domain.
|
||||||
|
#
|
||||||
|
# A basic screen recording script based on wf-recorder for sway,
|
||||||
|
# required executables:
|
||||||
|
# wf-recorder - for the actual screen recording
|
||||||
|
# jq - to parse JSON
|
||||||
|
# slurp - to select a screen area
|
||||||
|
# notify-send - for notification functionality
|
||||||
|
#
|
||||||
|
# Loosely based on:
|
||||||
|
# https://gist.github.com/ugursogukpinar/f390d9f4c829fb1b05fc74a12dd482bb
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# screenrecord.sh - record whole screen
|
||||||
|
# screenrecord.sh -s - record screen area
|
||||||
|
# screenrecord.sh -w - record window
|
||||||
|
# screenrecord.sh -t - (may be used with any other option) if screenrecording
|
||||||
|
# is currently active, toggle it off and no recording takes
|
||||||
|
# place
|
||||||
|
#
|
||||||
|
# Author Lorenzo Cogotti, The DoubleFourteen Code Forge
|
||||||
|
|
||||||
|
pidfile="/var/run/user/$(id -u)/screenrecord.pid"
|
||||||
|
filename="$(xdg-user-dir VIDEOS)/ScreenCast_$(date +%F_%T).mp4"
|
||||||
|
|
||||||
|
isrunning() {
|
||||||
|
pid=$(cat "$pidfile" 2>/dev/null)
|
||||||
|
test $? && kill -s 0 -- "$pid" 2>/dev/null
|
||||||
|
return $?
|
||||||
|
}
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
printf -- "Usage: %s: [-s|-w] [-t]\n" $(basename -- "$0" .sh) >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Parse arguments
|
||||||
|
while getopts swt opt; do
|
||||||
|
case $opt in
|
||||||
|
s) sflag=1 ;;
|
||||||
|
w) wflag=1 ;;
|
||||||
|
t) tflag=1 ;;
|
||||||
|
?) usage ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
shift $(($OPTIND - 1))
|
||||||
|
[ $# -ne 0 ] && usage
|
||||||
|
[ ! -z "$sflag" ] && [ ! -z "$wflag" ] && usage
|
||||||
|
|
||||||
|
if ! isrunning; then
|
||||||
|
# Start recording
|
||||||
|
if [ ! -z "$sflag" ]; then
|
||||||
|
wf-recorder -f "$filename" -g "$(slurp -c "#FFFFFF")" >/dev/null 2>&1 &
|
||||||
|
elif [ ! -z "$wflag" ]; then
|
||||||
|
wf-recorder -f "$filename" -g "$(swaymsg -t get_tree | \
|
||||||
|
jq -r '.. | select(.pid? and .visible?) | .rect | "\(.x),\(.y) \(.width)x\(.height)"' | \
|
||||||
|
slurp -c "#FFFFFF" )" >/dev/null 2>&1 &
|
||||||
|
else
|
||||||
|
wf-recorder -f "$filename" >/dev/null 2>&1 &
|
||||||
|
fi
|
||||||
|
|
||||||
|
pid=$!
|
||||||
|
printf -- "%d" "$pid" >"$pidfile" || exit 1
|
||||||
|
|
||||||
|
trap 'rm -f "$pidfile"; trap - EXIT exit' EXIT INT HUP TERM
|
||||||
|
wait -- "$pid"
|
||||||
|
|
||||||
|
notify-send -e \
|
||||||
|
"Screen recording complete" \
|
||||||
|
"Video saved to: <i>$(basename -- "$filename" .mp4)</i>"
|
||||||
|
|
||||||
|
elif [ ! -z "$tflag" ]; then
|
||||||
|
# Toggle recording off
|
||||||
|
kill -s INT -- "$pid"
|
||||||
|
fi
|
Loading…
Reference in New Issue