dmenurecord 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #!/bin/sh
  2. # launches dmenu with query to record
  3. display_size="$(xrandr | awk -F'[ +]' '/primary/{print $4" -i :0.0+"$5","$6}')"
  4. killrecording() {
  5. recpid="$(cat /tmp/recordingpid)"
  6. kill -15 "$recpid"
  7. rm -f /tmp/recordingpid
  8. sleep 3
  9. kill -9 "$recpid"
  10. exit
  11. }
  12. screencast() {
  13. ffmpeg -y \
  14. -f x11grab \
  15. -framerate 60 \
  16. -s $display_size \
  17. -f alsa -i default \
  18. -r 30 \
  19. -c:v libx264rgb -crf 0 -preset ultrafast -c:a flac \
  20. "$HOME/screencast-$(date '+%y%m%d-%H%M-%S').mkv" &
  21. echo $! > /tmp/recordingpid
  22. }
  23. video() {
  24. ffmpeg \
  25. -f x11grab \
  26. -s $display_size \
  27. -c:v libx264 -qp 0 -r 30 \
  28. "$HOME/video-$(date '+%y%m%d-%H%M-%S').mkv" &
  29. echo $! > /tmp/recordingpid
  30. }
  31. webcamhidef() {
  32. ffmpeg \
  33. -f v4l2 \
  34. -i /dev/video0 \
  35. -video_size 1920x1080 \
  36. "$HOME/webcam-$(date '+%y%m%d-%H%M-%S').mkv" &
  37. echo $! > /tmp/recordingpid
  38. }
  39. webcam() {
  40. ffmpeg \
  41. -f v4l2 \
  42. -i /dev/video0 \
  43. -video_size 640x480 \
  44. "$HOME/webcam-$(date '+%y%m%d-%H%M-%S').mkv" &
  45. echo $! > /tmp/recordingpid
  46. }
  47. audio() {
  48. ffmpeg \
  49. -f alsa -i default \
  50. -c:a flac \
  51. "$HOME/audio-$(date '+%y%m%d-%H%M-%S').flac" &
  52. echo $! > /tmp/recordingpid
  53. updateicon "🎙️"
  54. }
  55. askrecording() {
  56. choice=$(printf "screencast\\nvideo\\naudio\\nwebcam\\nwebcam (hi-def)" | dmenu -i -p "Select recording style:")
  57. case "$choice" in
  58. screencast) screencast;;
  59. audio) audio;;
  60. video) video;;
  61. webcam) webcam;;
  62. "webcam (hi-def)") webcamhidef;;
  63. esac
  64. }
  65. asktoend() {
  66. response=$(printf "No\\nYes" | dmenu -i -p "Recording still active. End recording?") &&
  67. [ "$response" = "Yes" ] && killrecording
  68. }
  69. case "$1" in
  70. screencast) screencast;;
  71. audio) audio;;
  72. video) video;;
  73. kill) killrecording;;
  74. *) [ -f /tmp/recordingpid ] && asktoend && exit || askrecording;;
  75. esac