summaryrefslogtreecommitdiff
path: root/.local
diff options
context:
space:
mode:
authorkrolxon <krolyxon@tutanota.com>2023-12-16 19:32:27 +0530
committerkrolxon <krolyxon@tutanota.com>2023-12-16 19:32:27 +0530
commitc5663edf453e9cf04b600268bfae2aa57987cde5 (patch)
tree6d4606ab5362c6157865ca33bd14c27dd24ab327 /.local
parentfc1309dd32e668b1aa9e7b0d9f5675dc29dddc90 (diff)
dmenurecord
Diffstat (limited to '.local')
-rwxr-xr-x.local/bin/dmenurecord127
-rwxr-xr-x.local/bin/wrdm2
2 files changed, 109 insertions, 20 deletions
diff --git a/.local/bin/dmenurecord b/.local/bin/dmenurecord
index b8fa8eb..ca6b011 100755
--- a/.local/bin/dmenurecord
+++ b/.local/bin/dmenurecord
@@ -1,25 +1,94 @@
#!/bin/sh
-screencast() { \
- ffmpeg -f x11grab -r 30 -s 1920x1080 -i :0.0 \
- -f pulse -ac 2 -ar 48000 -i alsa_output.pci-0000_00_1b.0.analog-stereo.monitor \
- -r 24 \
- -use_wallclock_as_timestamps 1 \
- -f alsa -thread_queue_size 1024 -i default \
- -c:v h264 \
- -crf 0 -preset ultrafast -c:a aac \
- ~/vids/recs/"$(date '+%C%y-%m%M-%d-%H-%M-%S').mp4" &
- echo $! > /tmp/recordingpid
-}
+# Usage:
+# `$0`: Ask for recording type via dmenu
+# `$0 screencast`: Record both audio and screen
+# `$0 video`: Record only screen
+# `$0 audio`: Record only audio
+# `$0 kill`: Kill existing recording
+#
+# If there is already a running instance, user will be prompted to end it.
+getdim() { xrandr | grep -oP '(?<=current ).*(?=,)' | tr -d ' ' ;}
+
+updateicon() { \
+ echo "$1" > /tmp/recordingicon
+ pkill -RTMIN+9 "${STATUSBAR:-dwmblocks}"
+ }
killrecording() {
recpid="$(cat /tmp/recordingpid)"
kill -15 "$recpid"
rm -f /tmp/recordingpid
- sleep 3
- kill -9 "$recpid"
- exit
+ updateicon ""
+ pkill -RTMIN+9 "${STATUSBAR:-dwmblocks}"
+ }
+
+screencast() { \
+ ffmpeg -y \
+ -f x11grab \
+ -framerate 30 \
+ -s "$(getdim)" \
+ -i "$DISPLAY" \
+ -r 24 \
+ -use_wallclock_as_timestamps 1 \
+ -f alsa -thread_queue_size 1024 -i default \
+ -c:v h264 \
+ -crf 0 -preset ultrafast -c:a aac \
+ "$HOME/screencast-$(date '+%y%m%d-%H%M-%S').mp4" &
+ echo $! > /tmp/recordingpid
+ updateicon "⏺️🎙️"
+ }
+
+video() { ffmpeg \
+ -f x11grab \
+ -framerate 30 \
+ -s "$(getdim)" \
+ -i "$DISPLAY" \
+ -c:v libx264 -qp 0 -r 30 \
+ "$HOME/video-$(date '+%y%m%d-%H%M-%S').mkv" &
+ echo $! > /tmp/recordingpid
+ updateicon "⏺️"
+ }
+
+webcamhidef() { ffmpeg \
+ -f v4l2 \
+ -i /dev/video0 \
+ -video_size 1920x1080 \
+ "$HOME/webcam-$(date '+%y%m%d-%H%M-%S').mkv" &
+ echo $! > /tmp/recordingpid
+ updateicon "🎥"
+ }
+
+webcam() { ffmpeg \
+ -f v4l2 \
+ -i /dev/video0 \
+ -video_size 640x480 \
+ "$HOME/webcam-$(date '+%y%m%d-%H%M-%S').mkv" &
+ echo $! > /tmp/recordingpid
+ updateicon "🎥"
+ }
+
+
+audio() { \
+ ffmpeg \
+ -f alsa -i default \
+ -c:a flac \
+ "$HOME/audio-$(date '+%y%m%d-%H%M-%S').flac" &
+ echo $! > /tmp/recordingpid
+ updateicon "🎙️"
+ }
+
+askrecording() { \
+ choice=$(printf "screencast\\nvideo\\nvideo selected\\naudio\\nwebcam\\nwebcam (hi-def)" | dmenu -i -p "Select recording style:")
+ case "$choice" in
+ screencast) screencast;;
+ audio) audio;;
+ video) video;;
+ *selected) videoselected;;
+ webcam) webcam;;
+ "webcam (hi-def)") webcamhidef;;
+ esac
}
asktoend() { \
@@ -27,8 +96,28 @@ asktoend() { \
[ "$response" = "Yes" ] && killrecording
}
-if [ -f /tmp/recordingpid ]; then
- asktoend && exit
-else
- screencast
-fi
+videoselected()
+{
+ slop -f "%x %y %w %h" > /tmp/slop
+ read -r X Y W H < /tmp/slop
+ rm /tmp/slop
+
+ ffmpeg \
+ -f x11grab \
+ -framerate 30 \
+ -video_size "$W"x"$H" \
+ -i :0.0+"$X,$Y" \
+ -c:v libx264 -qp 0 -r 30 \
+ "$HOME/box-$(date '+%y%m%d-%H%M-%S').mkv" &
+ echo $! > /tmp/recordingpid
+ updateicon "⏺️"
+}
+
+case "$1" in
+ screencast) screencast;;
+ audio) audio;;
+ video) video;;
+ *selected) videoselected;;
+ kill) killrecording;;
+ *) ([ -f /tmp/recordingpid ] && asktoend && exit) || askrecording;;
+esac
diff --git a/.local/bin/wrdm b/.local/bin/wrdm
index 51dfe6d..5b10f05 100755
--- a/.local/bin/wrdm
+++ b/.local/bin/wrdm
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/env bash
# word=$(dmenu -p "Enter Word: " <&-)
word=$(cat ~/.local/bin/words.txt | dmenu -l 25 -p "Choose Word: ")