#!/bin/sh # screenshot directory screenshot_directory="$HOME/Pictures/screenshots" videos_directory="$HOME/Videos" audio_directory="$HOME/Music" mkdir -p "$screenshot_directory" mkdir -p "$videos_directory" mkdir -p "$audio_directory" # date=$(date '+%d-%m-%Y-%H-%M-%S') #10-08-2025-18-53-58 date=$(date '+%Y-%m-%d_%H-%M-%S') #2025-08-10_18-53-58 screen_resolution="$(xdpyinfo | grep dimensions | sed -r 's/^[^0-9]*([0-9]+x[0-9]+).*$/\1/')" microphone="$(pacmd list-sources | grep -E '^\s+name: .*alsa_input' | cut -c 8- | sed 's/[<,>]//g')" desktop="$(pacmd list-sources | grep -E '^\s+name: .*alsa_output' | cut -c 8- | sed 's/[<,>]//g')" get_area(){ slop="$(slop -n -f '%w,%h,%x,%y')" w=$(echo "$slop" | cut -d ',' -f1) h=$(echo "$slop" | cut -d ',' -f2) x=$(echo "$slop" | cut -d ',' -f3) y=$(echo "$slop" | cut -d ',' -f4) [ $((w%2)) -eq 1 ] && w=$(( w + 1 )) [ $((h%2)) -eq 1 ] && h=$(( h + 1 )) [ $((x%2)) -eq 1 ] && x=$(( x + 1 )) [ $((y%2)) -eq 1 ] && y=$(( y + 1 )) wh="${w}x${h}" } screenshot_selected_area(){ ffcast -q -g "$(slop)" png "$screenshot_directory/$date.png" xclip -selection clipboard -t image/png "$screenshot_directory/$date.png" notify-send -i "$screenshot_directory/$date.png" "Screenshot" "Area screenshot taken" } screenshot_full_screen(){ ffcast -q png "$screenshot_directory/$date.png" xclip -selection clipboard -t image/png "$screenshot_directory/$date.png" notify-send -i "$screenshot_directory/$date.png" "Screenshot" "Full screen screenshot taken" } video_selected_area(){ get_area ffmpeg -hide_banner -loglevel error -show_region 1 \ -f x11grab -video_size "$wh" -framerate 30 -i :0.0+"$x","$y" -pix_fmt yuv420p "$videos_directory/$date.mp4" ffmpeg -i "$videos_directory/$date.mp4" -ss 00:00:01.000 -vframes 1 "/tmp/$date.png" notify-send -i "/tmp/$date.png" "Video" "Area video taken" } video_full_screen(){ ffmpeg -hide_banner -loglevel error -show_region 1 \ -f x11grab -video_size "$screen_resolution" -framerate 30 -i :0.0 -pix_fmt yuv420p "$videos_directory/$date.mp4" ffmpeg -i "$videos_directory/$date.mp4" -ss 00:00:01.000 -vframes 1 "/tmp/$date.png" notify-send -i "/tmp/$date.png" "Video" "Full screen video taken" } video_full_screen_rgba(){ ffmpeg -hide_banner -loglevel error -show_region 1 \ -f x11grab -video_size "$screen_resolution" -framerate 30 -i :0.0 -pix_fmt rgba "$videos_directory/$date.mp4" ffmpeg -i "$videos_directory/$date.mp4" -ss 00:00:01.000 -vframes 1 "/tmp/$date.png" notify-send -i "/tmp/$date.png" "Video" "Full screen video taken (rgba)" } audio_microphone(){ ffmpeg -f pulse -i "$microphone" -metadata title="$date" "$audio_directory/$date.mp3" notify-send "Audio" "Microphone audio recorded" } audio_desktop(){ ffmpeg -f pulse -i "$desktop" -metadata title="$date" "$audio_directory/$date.mp3" notify-send "Audio" "Desktop audio recorded" } video_selected_area_audio_microphone(){ get_area ffmpeg -hide_banner -loglevel error -show_region 1 \ -f x11grab -video_size "$wh" -framerate 30 -i :0.0+"$x","$y" \ -f alsa -i default -pix_fmt yuv420p "$videos_directory/$date.mp4" ffmpeg -i "$videos_directory/$date.mp4" -ss 00:00:01.000 -vframes 1 "/tmp/$date.png" notify-send -i "/tmp/$date.png" "Video" "Area video with audio taken" } video_full_screen_audio_microphone(){ ffmpeg -hide_banner -loglevel error -show_region 1 \ -f x11grab -video_size "$screen_resolution" -framerate 30 -i :0.0 \ -f alsa -i default -pix_fmt yuv420p "$videos_directory/$date.mp4" ffmpeg -i "$videos_directory/$date.mp4" -ss 00:00:01.000 -vframes 1 "/tmp/$date.png" notify-send -i "/tmp/$date.png" "Video" "Full screen video with audio taken" } stop(){ pkill -fxn '(/\S+)*ffmpeg\s.*\sx11grab\s.*' pkill -fxn '(/\S+)*ffmpeg\s.*\spulse\s.*' exit 1 } help(){ cat << EOF -h | -help | --help -s | -stop -sa | -screenshot_selected_area -sf | -screenshot_full_screen -va | -video_selected_area -vf | -video_full_screen -am | -audio_microphone -ad | -audio_desktop -vaam | -video_selected_area_audio_microphone -vfam | -video_full_screen_audio_microphone EOF } main(){ while [ "$1" != "" ]; do PARAM="$1" case $PARAM in -h | -help | --help) help exit 1 ;; -s | -stop) stop exit 1 ;; -sa | -screenshot_selected_area) screenshot_selected_area ;; -sf | -screenshot_full_screen) screenshot_full_screen ;; -va | -video_selected_area) video_selected_area ;; -vf | -video_full_screen) video_full_screen ;; -vf_rgba | -video_full_screen_rgba) video_full_screen_rgba ;; -am | -audio_microphone) audio_microphone ;; -ad | -audio_desktop) audio_desktop ;; -vaam | -video_selected_area_audio_microphone) video_selected_area_audio_microphone ;; -vfam | -video_full_screen_audio_microphone) video_full_screen_audio_microphone ;; *) echo "ERROR: unknown parameter \"$PARAM\"" help exit 1 ;; esac shift done # done set -e } main "$1" & exit 0