80 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| # A simple wrapper around ffmpeg
 | |
| #
 | |
| # When run, a screenrecording will be made
 | |
| # The file path will be put in the primary selection
 | |
| # Will create notification containing file path
 | |
| #
 | |
| # If you have a project specified, it will put the sceenshot in that folder instead of /tmp
 | |
| #
 | |
| # Relies on ffmpeg for taking screenrecording
 | |
| 
 | |
| PIDFILE="/tmp/screenrecord.pid"
 | |
| 
 | |
| 
 | |
| 
 | |
| if [ -f "$PIDFILE" ]; then
 | |
| 	pkill ffmpeg
 | |
| 	exit
 | |
| fi
 | |
| 
 | |
| echo $$ > "$PIDFILE"
 | |
| 
 | |
| 
 | |
| 
 | |
| path='/tmp'
 | |
| command -v ffmpeg > /dev/null || ( echo -n "You need to install ffmpeg" && exit 1 )
 | |
| 
 | |
| #If a project is set we will put screenshots in the project's folder
 | |
| command -v project > /dev/null && project=$(project current --path)
 | |
| if [ -n "$project" ]; then
 | |
| 	path="$project/screenrecordings"
 | |
| 	#Make the directory if it doesn't exist
 | |
| 	mkdir "$path" 2> /dev/null
 | |
| fi
 | |
| 
 | |
| filename="$(date +"%Y-%m-%dT%H-%M-%SZ").mkv"
 | |
| file="${path}/${filename}"
 | |
| 
 | |
| [ "$1" = "-w" ] && sleep "$2" && shift && shift
 | |
| 
 | |
| case $1 in
 | |
| 	"select")
 | |
| 		if [ -n "$WAYLAND_DISPLAY" ]; then
 | |
| 			echo "Shouldn't get here"
 | |
| 			echo "No wayland support yet" >&2
 | |
| 			exit
 | |
| 		else
 | |
| 			echo "I get here"
 | |
| 			ffmpeg -framerate 30 -f x11grab $(slop -l -c "0.41,0.62,0.42,0.2" -f "-video_size %wx%h -i :0.0+%x,%y") "$file"
 | |
| 		fi
 | |
| 		;;
 | |
| 	*)
 | |
| 		if [ -n "$WAYLAND_DISPLAY" ]; then
 | |
| 			echo "No wayland support yet" >&2
 | |
| 			exit
 | |
| 		else
 | |
| 			ffmpeg -framerate 30 -f x11grab -video_size "$(xdpyinfo | grep dimensions | awk '{print $2}')" -i :0.0 "$file"
 | |
| 		fi
 | |
| 		;;
 | |
| esac
 | |
| 
 | |
| if [ -f "$file" ]; then
 | |
| 	# Create a gif
 | |
| 	ffmpeg -i "$file" -vf "fps=10,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" -loop 0 "${file%.*}".gif
 | |
| 	if [ -n "$WAYLAND_DISPLAY" ]; then
 | |
| 		# Copies the image to your clipboard (ctrl + v)
 | |
| 		wl-copy <  "${file%.*}.gif"
 | |
| 		# Copies the filename to primary selection (shift + insert or middle mouse)
 | |
| 		echo -n "${file%.*}.gif" | wl-copy --primary
 | |
| 	else
 | |
| 		# Copies the image to your clipboard (ctrl + v)
 | |
| 		xclip -selection clipboard -target image/gif -i "${file%.*}.gif"
 | |
| 		# Copies the filename to primary selection (shift + insert or middle mouse)
 | |
| 		echo -n "${file%.*}.gif" | xclip -selection primary
 | |
| 	fi
 | |
| 	# Creates notification with file name
 | |
| 	notify-send "New Screenrecording" "$file\n${file%.*}.gif"
 | |
| fi
 | |
| rm "$PIDFILE"
 |