Krolyxon
Commit c5663ed

Branches

Refs →

dotfiles-x11c5663ed

dmenurecord

Author
krolxon
Date
2023-12-16 19:32 +0530
Parent
fc1309d
Commit
c5663edf453e9cf04b600268bfae2aa57987cde5

+109 −20

2 files changed

  1. M .local/bin/dmenurecord +108 −19
  2. M .local/bin/wrdm +1 −1
M .local/bin/dmenurecord View
@@ -1,25 +1,94 @@
11 #!/bin/sh
22
3−screencast() { \
4− ffmpeg -f x11grab -r 30 -s 1920x1080 -i :0.0 \
5− -f pulse -ac 2 -ar 48000 -i alsa_output.pci-0000_00_1b.0.analog-stereo.monitor \
6− -r 24 \
7− -use_wallclock_as_timestamps 1 \
8− -f alsa -thread_queue_size 1024 -i default \
9− -c:v h264 \
10− -crf 0 -preset ultrafast -c:a aac \
11− ~/vids/recs/"$(date '+%C%y-%m%M-%d-%H-%M-%S').mp4" &
12− echo $! > /tmp/recordingpid
13−}
3+# Usage:
4+# `$0`: Ask for recording type via dmenu
5+# `$0 screencast`: Record both audio and screen
6+# `$0 video`: Record only screen
7+# `$0 audio`: Record only audio
8+# `$0 kill`: Kill existing recording
9+#
10+# If there is already a running instance, user will be prompted to end it.
1411
12+getdim() { xrandr | grep -oP '(?<=current ).*(?=,)' | tr -d ' ' ;}
13+
14+updateicon() { \
15+ echo "$1" > /tmp/recordingicon
16+ pkill -RTMIN+9 "${STATUSBAR:-dwmblocks}"
17+ }
1518
1619 killrecording() {
1720 recpid="$(cat /tmp/recordingpid)"
1821 kill -15 "$recpid"
1922 rm -f /tmp/recordingpid
20− sleep 3
21− kill -9 "$recpid"
22− exit
23+ updateicon ""
24+ pkill -RTMIN+9 "${STATUSBAR:-dwmblocks}"
25+ }
26+
27+screencast() { \
28+ ffmpeg -y \
29+ -f x11grab \
30+ -framerate 30 \
31+ -s "$(getdim)" \
32+ -i "$DISPLAY" \
33+ -r 24 \
34+ -use_wallclock_as_timestamps 1 \
35+ -f alsa -thread_queue_size 1024 -i default \
36+ -c:v h264 \
37+ -crf 0 -preset ultrafast -c:a aac \
38+ "$HOME/screencast-$(date '+%y%m%d-%H%M-%S').mp4" &
39+ echo $! > /tmp/recordingpid
40+ updateicon "⏺️🎙️"
41+ }
42+
43+video() { ffmpeg \
44+ -f x11grab \
45+ -framerate 30 \
46+ -s "$(getdim)" \
47+ -i "$DISPLAY" \
48+ -c:v libx264 -qp 0 -r 30 \
49+ "$HOME/video-$(date '+%y%m%d-%H%M-%S').mkv" &
50+ echo $! > /tmp/recordingpid
51+ updateicon "⏺️"
52+ }
53+
54+webcamhidef() { ffmpeg \
55+ -f v4l2 \
56+ -i /dev/video0 \
57+ -video_size 1920x1080 \
58+ "$HOME/webcam-$(date '+%y%m%d-%H%M-%S').mkv" &
59+ echo $! > /tmp/recordingpid
60+ updateicon "🎥"
61+ }
62+
63+webcam() { ffmpeg \
64+ -f v4l2 \
65+ -i /dev/video0 \
66+ -video_size 640x480 \
67+ "$HOME/webcam-$(date '+%y%m%d-%H%M-%S').mkv" &
68+ echo $! > /tmp/recordingpid
69+ updateicon "🎥"
70+ }
71+
72+
73+audio() { \
74+ ffmpeg \
75+ -f alsa -i default \
76+ -c:a flac \
77+ "$HOME/audio-$(date '+%y%m%d-%H%M-%S').flac" &
78+ echo $! > /tmp/recordingpid
79+ updateicon "🎙️"
80+ }
81+
82+askrecording() { \
83+ choice=$(printf "screencast\\nvideo\\nvideo selected\\naudio\\nwebcam\\nwebcam (hi-def)" | dmenu -i -p "Select recording style:")
84+ case "$choice" in
85+ screencast) screencast;;
86+ audio) audio;;
87+ video) video;;
88+ *selected) videoselected;;
89+ webcam) webcam;;
90+ "webcam (hi-def)") webcamhidef;;
91+ esac
2392 }
2493
2594 asktoend() { \
@@ -27,8 +96,28 @@ asktoend() { \
2796 [ "$response" = "Yes" ] && killrecording
2897 }
2998
30−if [ -f /tmp/recordingpid ]; then
31− asktoend && exit
32−else
33− screencast
34−fi
99+videoselected()
100+{
101+ slop -f "%x %y %w %h" > /tmp/slop
102+ read -r X Y W H < /tmp/slop
103+ rm /tmp/slop
104+
105+ ffmpeg \
106+ -f x11grab \
107+ -framerate 30 \
108+ -video_size "$W"x"$H" \
109+ -i :0.0+"$X,$Y" \
110+ -c:v libx264 -qp 0 -r 30 \
111+ "$HOME/box-$(date '+%y%m%d-%H%M-%S').mkv" &
112+ echo $! > /tmp/recordingpid
113+ updateicon "⏺️"
114+}
115+
116+case "$1" in
117+ screencast) screencast;;
118+ audio) audio;;
119+ video) video;;
120+ *selected) videoselected;;
121+ kill) killrecording;;
122+ *) ([ -f /tmp/recordingpid ] && asktoend && exit) || askrecording;;
123+esac
M .local/bin/wrdm View
@@ -1,4 +1,4 @@
1−#!/bin/sh
1+#!/bin/env bash
22
33 # word=$(dmenu -p "Enter Word: " <&-)
44 word=$(cat ~/.local/bin/words.txt | dmenu -l 25 -p "Choose Word: ")