~kris/dots

srice

ref: ff7367cb2ef828502c3f7fde003f45d5daa33206 srice/.local/bin/record -rwxr-xr-x 2.0 KiB
ff7367cb — Kris Yotam add ram memory visualization script 4 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#!/bin/sh

# Screen recording script with audio
# Toggle: starts recording if not running, stops if running
# Records the focused monitor only
# Saves to ~/Videos as sr-YYYY-MM-DD_HH-MM-SS.mkv

VIDEOS_DIR="$HOME/Videos"
mkdir -p "$VIDEOS_DIR"

get_focused_monitor_geometry() {
	# Get mouse position as proxy for focused monitor
	eval $(xdotool getmouselocation --shell 2>/dev/null)
	xrandr --listmonitors | awk -v mx="$X" -v my="$Y" '
	NR > 1 {
		geo = $3; gsub(/\/[0-9]+/, "", geo)
		split(geo, a, "[x+]")
		w = a[1]; h = a[2]; ox = a[3]; oy = a[4]
		if (mx >= ox && mx < ox+w && my >= oy && my < oy+h) {
			printf "%sx%s %s,%s", w, h, ox, oy; exit
		}
	}'
}

start_recording() {
	GEOM=$(get_focused_monitor_geometry)
	RES=$(echo "$GEOM" | cut -d' ' -f1)
	OFFSET=$(echo "$GEOM" | cut -d' ' -f2)

	TIMESTAMP=$(date '+%Y-%m-%d_%H-%M-%S')
	FILENAME="sr-${TIMESTAMP}-${RES}.mkv"

	# Record screen + audio from default sink (system audio)
	ffmpeg -y \
		-video_size "$RES" \
		-framerate 30 \
		-f x11grab -i ":0.0+${OFFSET}" \
		-f pulse -i default \
		-c:v libx264 -preset ultrafast -qp 0 \
		-c:a aac -b:a 192k \
		"$VIDEOS_DIR/$FILENAME" >/dev/null 2>&1 &

	echo $! > /tmp/recpid
	echo "$FILENAME" > /tmp/recfile

	# Update status bar
	echo "󰑋" > /tmp/recordingicon && pkill -RTMIN+9 dwmblocks

	notify-send -t 2000 "󰑋 Recording Started" "$RES from ${OFFSET}"
}

stop_recording() {
	kill -15 "$(cat /tmp/recpid)" 2>/dev/null
	FILENAME=$(cat /tmp/recfile 2>/dev/null)
	rm -f /tmp/recpid /tmp/recfile

	# Clear status bar icon
	echo "" > /tmp/recordingicon && pkill -RTMIN+9 dwmblocks

	notify-send -t 3000 "󰑋 Recording Stopped" "Saved: $FILENAME"
}

case "$1" in
	-start|--start)
		[ -f /tmp/recpid ] && notify-send -t 2000 "󰑋 Already Recording" && exit 1
		start_recording
		;;
	-stop|--stop)
		[ ! -f /tmp/recpid ] && notify-send -t 2000 "󰑋 Not Recording" && exit 1
		stop_recording
		;;
	*)
		if [ -f /tmp/recpid ]; then
			stop_recording
		else
			start_recording
		fi
		;;
esac