diff --git a/.scripts/screen-record.sh b/.scripts/screen-record.sh new file mode 100644 index 0000000..b0b7be6 --- /dev/null +++ b/.scripts/screen-record.sh @@ -0,0 +1,103 @@ +#!/bin/sh + +# Records the screen with OBS Studio. + +# This script depends on the following +# programs along with the indicated version: +# OBS Studio - 23.2.1-2 +# xdotool - version 3.20160805.1 +# echo (part of coreutils 8.31) +# notify-send - 0.7.8 + +# Having a notify-send means you also need to +# have a notification server (such as dunst) to be up at the time. + +function error_cleanup() { + # rm "$pic_filepath" + echo "$red An error occurred on line $1\n $reset" +} + +help_section=" +Simply captures a recording with OBS Studio. + +Note it requires you to set a hotkey for recording in +OBS Studio in order to run this script properly. +The default hotkey set in this script is 'Shift+R'. +If your hotkey is any different, +change the OBS_RECORDING_HOTKEY variable +in this script accordingly. + +Usage: $0 [-o/--output ] [-s/--select] +[-d/--delay ] [--help] + +Options: +-h, --help - show the help section +-p, --profile - indicate the profile (default: 'Untitled') +-s, --scene - the scene to be used (default: 'Untitled') +" + +# setting up a exit trap in case of error +trap 'error_cleanup $LINENO' ERR + +while [[ $# -gt 0 ]] +do + case $1 in + -h|--help) + echo "$help_section" + exit 0;; + -p|--profile) + PROFILE="$2" + shift + shift;; + -s|--scene) + SCENE="$2" + shift;; + *) + shift;; + esac +done + +RECORDING_FILE="/tmp/currently-recording" +OBS_RECORDING_HOTKEY="shift+r" + +# The program simply checks for the +if [[ ! -f $RECORDING_FILE ]]; then + obs_command="obs --startrecording --minimize-to-tray " + + if [[ -n "$PROFILE" ]]; then + obs_command+="--profile $PROFILE " + fi + + if [[ -n "$SCENE" ]]; then + obs_command+="--scene $SCENE " + fi + + eval $obs_command & + sleep 1; + + if [[ $? != 0 ]]; then + notify-send "Recording starting failed" "Did not successfully started recording." + exit 1; + fi + + WINDOW_ID=$(xdotool search --name "OBS [[:digit:]]+" | head -n1) + notify-send "Recording started." "Found a OBS Studio window instance with the window ID $WINDOW_ID." --expire-time=1000 + + touch $RECORDING_FILE + echo $WINDOW_ID >> $RECORDING_FILE +else + current_window_id=$(xdotool getactivewindow) + + WINDOW_ID=$(<"$RECORDING_FILE") + + xdotool windowkill $WINDOW_ID + + if [[ $? != 0 ]]; then + notify-send "Recording stop process failed" "There's a problem with stopping recording. Might want to manually stop the recording yourself." + exit 1; + fi + + notify-send "Recording ended." "The recording should be cancelled now." + xdotool windowactivate $current_window_id + rm "$RECORDING_FILE" +fi