configuration form the arch linux stored
This commit is contained in:
184
rofi/scripts/rofi-screenshot.sh
Executable file
184
rofi/scripts/rofi-screenshot.sh
Executable file
@@ -0,0 +1,184 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
## rofi-screenshot
|
||||
## Author: ceuk @ github
|
||||
## Licence: WTFPL
|
||||
## Usage:
|
||||
## show the menu with rofi-screenshot
|
||||
## stop recording with rofi-screenshot -s
|
||||
|
||||
# Screenshot directory
|
||||
screenshot_directory="$HOME/Pictures/Screenshots"
|
||||
|
||||
# set ffmpeg defaults
|
||||
ffmpeg() {
|
||||
command ffmpeg -hide_banner -loglevel error -nostdin "$@"
|
||||
}
|
||||
|
||||
video_to_gif() {
|
||||
ffmpeg -i "$1" -vf palettegen -f image2 -c:v png - |
|
||||
ffmpeg -i "$1" -i - -filter_complex paletteuse "$2"
|
||||
}
|
||||
|
||||
countdown() {
|
||||
notify-send "Screenshot" "Recording in 3 seconds" -t 1000
|
||||
sleep 1
|
||||
notify-send "Screenshot" "Recording in 2 seconds" -t 1000
|
||||
sleep 1
|
||||
notify-send "Screenshot" "Recording in 1 seconds" -t 1000
|
||||
sleep 1
|
||||
}
|
||||
|
||||
crtc() {
|
||||
notify-send "Screenshot" "Select a region to capture"
|
||||
ffcast -q $(slop -n -f '-g %g ') png /tmp/screenshot_clip.png
|
||||
xclip -selection clipboard -t image/png /tmp/screenshot_clip.png
|
||||
rm /tmp/screenshot_clip.png
|
||||
notify-send "Screenshot" "Region copied to Clipboard"
|
||||
}
|
||||
|
||||
crtf() {
|
||||
notify-send "Screenshot" "Select a region to capture"
|
||||
dt=$(date '+%d-%m-%Y %H:%M:%S')
|
||||
ffcast -q $(slop -n -f '-g %g ') png "$screenshot_directory/$dt.png"
|
||||
notify-send "Screenshot" "Region saved to $screenshot_directory"
|
||||
}
|
||||
|
||||
cstc() {
|
||||
ffcast -q png /tmp/screenshot_clip.png
|
||||
xclip -selection clipboard -t image/png /tmp/screenshot_clip.png
|
||||
rm /tmp/screenshot_clip.png
|
||||
notify-send "Screenshot" "Screenshot copied to Clipboard"
|
||||
}
|
||||
|
||||
cstf() {
|
||||
dt=$(date '+%d-%m-%Y %H:%M:%S')
|
||||
ffcast -q png "$screenshot_directory/$dt.png"
|
||||
notify-send "Screenshot" "Screenshot saved to $screenshot_directory"
|
||||
}
|
||||
|
||||
rgrtf() {
|
||||
notify-send "Screenshot" "Select a region to record"
|
||||
dt=$(date '+%d-%m-%Y %H:%M:%S')
|
||||
ffcast -q $(slop -n -f '-g %g ' && countdown) rec /tmp/screenshot_gif.mp4
|
||||
notify-send "Screenshot" "Converting to gif... (this can take a while)"
|
||||
video_to_gif /tmp/screenshot_gif.mp4 "$screenshot_directory/$dt.gif"
|
||||
rm /tmp/screenshot_gif.mp4
|
||||
notify-send "Screenshot" "Recording saved to $screenshot_directory"
|
||||
}
|
||||
|
||||
rgstf() {
|
||||
countdown
|
||||
dt=$(date '+%d-%m-%Y %H:%M:%S')
|
||||
ffcast -q rec /tmp/screenshot_gif.mp4
|
||||
notify-send "Screenshot" "Converting to gif... (this can take a while)"
|
||||
video_to_gif /tmp/screenshot_gif.mp4 "$screenshot_directory/$dt.gif"
|
||||
rm /tmp/screenshot_gif.mp4
|
||||
notify-send "Screenshot" "Recording saved to $screenshot_directory"
|
||||
}
|
||||
|
||||
rvrtf() {
|
||||
notify-send "Screenshot" "Select a region to record"
|
||||
dt=$(date '+%d-%m-%Y %H:%M:%S')
|
||||
ffcast -q $(slop -n -f '-g %g ' && countdown) rec "$screenshot_directory/$dt.mp4"
|
||||
notify-send "Screenshot" "Recording saved to $screenshot_directory"
|
||||
}
|
||||
|
||||
rvstf() {
|
||||
countdown
|
||||
dt=$(date '+%d-%m-%Y %H:%M:%S')
|
||||
ffcast -q rec "$screenshot_directory/$dt.mp4"
|
||||
notify-send "Screenshot" "Recording saved to $screenshot_directory"
|
||||
}
|
||||
|
||||
get_options() {
|
||||
echo " Capture Region Clip"
|
||||
echo " Capture Region File"
|
||||
echo " Capture Screen Clip"
|
||||
echo " Capture Screen File"
|
||||
echo " Record Region File (GIF)"
|
||||
echo " Record Screen File (GIF)"
|
||||
echo " Record Region File (MP4)"
|
||||
echo " Record Screen File (MP4)"
|
||||
}
|
||||
|
||||
check_deps() {
|
||||
if ! hash $1 2>/dev/null; then
|
||||
echo "Error: This script requires $1"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
# check dependencies
|
||||
check_deps slop
|
||||
check_deps ffcast
|
||||
check_deps ffmpeg
|
||||
check_deps xclip
|
||||
check_deps rofi
|
||||
|
||||
if [[ $1 == '--help' ]] || [[ $1 = '-h' ]]
|
||||
then
|
||||
echo ### rofi-screenshot
|
||||
echo USAGE: rofi-screenshot [OPTION]
|
||||
echo \(no option\)
|
||||
echo " show the screenshot menu"
|
||||
echo -s, --stop
|
||||
echo " stop recording"
|
||||
echo -h, --help
|
||||
echo " this screen"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ $1 = '--stop' ]] || [[ $1 = '-s' ]]
|
||||
then
|
||||
pkill -fxn '(/\S+)*ffmpeg\s.*\sx11grab\s.*'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Get choice from rofi
|
||||
choice=$( (get_options) | rofi -dmenu -i -fuzzy -p "Screenshot" )
|
||||
|
||||
# If user has not picked anything, exit
|
||||
if [[ -z "${choice// }" ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# run the selected command
|
||||
case $choice in
|
||||
' Capture Region Clip')
|
||||
crtc
|
||||
;;
|
||||
' Capture Region File')
|
||||
crtf
|
||||
;;
|
||||
' Capture Screen Clip')
|
||||
cstc
|
||||
;;
|
||||
' Capture Screen File')
|
||||
cstf
|
||||
;;
|
||||
' Record Region File (GIF)')
|
||||
rgrtf
|
||||
;;
|
||||
' Record Screen File (GIF)')
|
||||
rgstf
|
||||
;;
|
||||
' Record Region File (MP4)')
|
||||
rvrtf
|
||||
;;
|
||||
' Record Screen File (MP4)')
|
||||
rvstf
|
||||
;;
|
||||
esac
|
||||
|
||||
# done
|
||||
set -e
|
||||
}
|
||||
|
||||
main $1 &
|
||||
|
||||
exit 0
|
||||
|
||||
!/bin/bash
|
||||
|
||||
Reference in New Issue
Block a user