dotties

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

dmenurecord (2348B)


      1 #!/bin/sh
      2 
      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.
     11 
     12 dir="$HOME/rec"
     13 
     14 updateicon() { \
     15 	echo "$1" > /tmp/recordingicon
     16 	pkill -RTMIN+11 i3blocks
     17 	}
     18 
     19 killrecording() {
     20 	recpid="$(cat /tmp/recordingpid)"
     21 	# kill with SIGTERM, allowing finishing touches.
     22 	kill -15 "$recpid"
     23 	rm -f /tmp/recordingpid
     24 	updateicon ""
     25 	pkill -RTMIN+11 i3blocks
     26 	# even after SIGTERM, ffmpeg may still run, so SIGKILL it.
     27 	sleep 3
     28 	kill -9 "$recpid"
     29 	exit
     30 	}
     31 
     32 screencast() { \
     33 	ffmpeg -y \
     34 	-f x11grab \
     35 	-framerate 30 \
     36 	-s $(xdpyinfo | grep dimensions | awk '{print $2;}') \
     37 	-i $DISPLAY \
     38 	-f alsa -i default \
     39 	-r 30 \
     40  	-c:v libx264rgb -crf 0 -preset ultrafast -c:a flac \
     41 	"$dir/screencast-$(date '+%y%m%d-%H%M-%S').mkv" &
     42 	echo $! > /tmp/recordingpid
     43 	updateicon "⏺️🎙️"
     44        	}
     45 
     46 video() { ffmpeg \
     47 	-f x11grab \
     48 	-s $(xdpyinfo | grep dimensions | awk '{print $2;}') \
     49 	-i $DISPLAY \
     50  	-c:v libx264 -qp 0 -r 30 \
     51 	"$dir/video-$(date '+%y%m%d-%H%M-%S').mkv" &
     52 	echo $! > /tmp/recordingpid
     53 	updateicon "⏺️"
     54 	}
     55 
     56 webcamhidef() { ffmpeg \
     57 	-f v4l2 \
     58 	-i /dev/video0 \
     59 	-video_size 1920x1080 \
     60 	"$dir/webcam-$(date '+%y%m%d-%H%M-%S').mkv" &
     61 	echo $! > /tmp/recordingpid
     62 	updateicon "🎥"
     63 	}
     64 
     65 webcam() { ffmpeg \
     66 	-f v4l2 \
     67 	-i /dev/video0 \
     68 	-video_size 640x480 \
     69 	"$dir/webcam-$(date '+%y%m%d-%H%M-%S').mkv" &
     70 	echo $! > /tmp/recordingpid
     71 	updateicon "🎥"
     72 	}
     73 
     74 
     75 audio() { \
     76 	ffmpeg \
     77 	-f alsa -i default \
     78 	-c:a flac \
     79 	"$dir/audio-$(date '+%y%m%d-%H%M-%S').flac" &
     80 	echo $! > /tmp/recordingpid
     81 	updateicon "🎙️"
     82 	}
     83 
     84 askrecording() { \
     85 	choice=$(printf "screencast\\nvideo\\naudio\\nwebcam\\nwebcam (hi-def)" | dmenu -i -p "Select recording style:")
     86 	case "$choice" in
     87 		screencast) screencast;;
     88 		audio) audio;;
     89 		video) video;;
     90 		webcam) webcam;;
     91 		"webcam (hi-def)") webcamhidef;;
     92 	esac
     93 	}
     94 
     95 asktoend() { \
     96 	response=$(printf "No\\nYes" | dmenu -i -p "Recording still active. End recording?") &&
     97 	[ "$response" = "Yes" ] &&  killrecording
     98 	}
     99 
    100 
    101 case "$1" in
    102 	screencast) screencast;;
    103 	audio) audio;;
    104 	video) video;;
    105 	kill) killrecording;;
    106 	*) ([ -f /tmp/recordingpid ] && asktoend && exit) || askrecording;;
    107 esac