dmenurecord
This commit is contained in:
parent
fc1309dd32
commit
c5663edf45
|
|
@ -1,25 +1,94 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
screencast() { \
|
# Usage:
|
||||||
ffmpeg -f x11grab -r 30 -s 1920x1080 -i :0.0 \
|
# `$0`: Ask for recording type via dmenu
|
||||||
-f pulse -ac 2 -ar 48000 -i alsa_output.pci-0000_00_1b.0.analog-stereo.monitor \
|
# `$0 screencast`: Record both audio and screen
|
||||||
-r 24 \
|
# `$0 video`: Record only screen
|
||||||
-use_wallclock_as_timestamps 1 \
|
# `$0 audio`: Record only audio
|
||||||
-f alsa -thread_queue_size 1024 -i default \
|
# `$0 kill`: Kill existing recording
|
||||||
-c:v h264 \
|
#
|
||||||
-crf 0 -preset ultrafast -c:a aac \
|
# If there is already a running instance, user will be prompted to end it.
|
||||||
~/vids/recs/"$(date '+%C%y-%m%M-%d-%H-%M-%S').mp4" &
|
|
||||||
echo $! > /tmp/recordingpid
|
|
||||||
}
|
|
||||||
|
|
||||||
|
getdim() { xrandr | grep -oP '(?<=current ).*(?=,)' | tr -d ' ' ;}
|
||||||
|
|
||||||
|
updateicon() { \
|
||||||
|
echo "$1" > /tmp/recordingicon
|
||||||
|
pkill -RTMIN+9 "${STATUSBAR:-dwmblocks}"
|
||||||
|
}
|
||||||
|
|
||||||
killrecording() {
|
killrecording() {
|
||||||
recpid="$(cat /tmp/recordingpid)"
|
recpid="$(cat /tmp/recordingpid)"
|
||||||
kill -15 "$recpid"
|
kill -15 "$recpid"
|
||||||
rm -f /tmp/recordingpid
|
rm -f /tmp/recordingpid
|
||||||
sleep 3
|
updateicon ""
|
||||||
kill -9 "$recpid"
|
pkill -RTMIN+9 "${STATUSBAR:-dwmblocks}"
|
||||||
exit
|
}
|
||||||
|
|
||||||
|
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() { \
|
asktoend() { \
|
||||||
|
|
@ -27,8 +96,28 @@ asktoend() { \
|
||||||
[ "$response" = "Yes" ] && killrecording
|
[ "$response" = "Yes" ] && killrecording
|
||||||
}
|
}
|
||||||
|
|
||||||
if [ -f /tmp/recordingpid ]; then
|
videoselected()
|
||||||
asktoend && exit
|
{
|
||||||
else
|
slop -f "%x %y %w %h" > /tmp/slop
|
||||||
screencast
|
read -r X Y W H < /tmp/slop
|
||||||
fi
|
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
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#!/bin/sh
|
#!/bin/env bash
|
||||||
|
|
||||||
# word=$(dmenu -p "Enter Word: " <&-)
|
# word=$(dmenu -p "Enter Word: " <&-)
|
||||||
word=$(cat ~/.local/bin/words.txt | dmenu -l 25 -p "Choose Word: ")
|
word=$(cat ~/.local/bin/words.txt | dmenu -l 25 -p "Choose Word: ")
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue