92 lines
2.2 KiB
Bash
92 lines
2.2 KiB
Bash
#!/bin/bash
|
|
|
|
outputDir="$HOME/Videos"
|
|
|
|
checkRecording() {
|
|
if pgrep -x "gpu-screen-recorder" > /dev/null; then
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
startRecording() {
|
|
if checkRecording; then
|
|
echo "A recording is already in progress."
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "$2" ]; then
|
|
echo "Usage: $0 start {screen|window} [screen_name|window_id]"
|
|
exit 1
|
|
fi
|
|
|
|
mode="$2"
|
|
target="$3"
|
|
|
|
outputFile="recording_$(date +%Y-%m-%d_%H-%M-%S).mp4"
|
|
outputPath="$outputDir/$outputFile"
|
|
mkdir -p "$outputDir"
|
|
|
|
case "$mode" in
|
|
screen)
|
|
if [ -z "$target" ]; then
|
|
echo "Usage: $0 start screen [screen_name]"
|
|
exit 1
|
|
fi
|
|
gpu-screen-recorder -w "$target" -f 60 -a "$(pactl get-default-sink).monitor" -o "$outputPath" &
|
|
;;
|
|
window)
|
|
if [ -z "$target" ]; then
|
|
echo "Usage: $0 start window [window_id]"
|
|
exit 1
|
|
fi
|
|
gpu-screen-recorder -w "$target" -f 60 -a "$(pactl get-default-sink).monitor" -o "$outputPath" &
|
|
;;
|
|
*)
|
|
echo "Invalid mode. Use 'screen' or 'window'."
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
echo "Recording started. Output will be saved to $outputPath"
|
|
}
|
|
|
|
stopRecording() {
|
|
if ! checkRecording; then
|
|
echo "No recording is in progress."
|
|
exit 1
|
|
fi
|
|
|
|
pkill -SIGINT gpu-screen-recorder
|
|
recentFile=$(ls -t "$outputDir"/recording_*.mp4 | head -n 1)
|
|
notify-send "Recording stopped" "Your recording has been saved." \
|
|
-i video-x-generic \
|
|
-a "Screen Recorder" \
|
|
-t 10000 \
|
|
-u normal \
|
|
--action="open_directory=xdg-open $outputDir" \
|
|
--action="play_recording=xdg-open $recentFile"
|
|
echo "Recording stopped. Output saved to $recentFile"
|
|
}
|
|
|
|
case "$1" in
|
|
start)
|
|
startRecording "$@"
|
|
;;
|
|
stop)
|
|
stopRecording
|
|
;;
|
|
status)
|
|
if checkRecording; then
|
|
echo "A recording is in progress."
|
|
else
|
|
echo "No recording is in progress."
|
|
fi
|
|
;;
|
|
*)
|
|
echo "Usage: $0 {start {screen|window} [screen_name|window_id]|stop|status}"
|
|
exit 1
|
|
;;
|
|
esac
|