From 0f4a0033653031d398c51ed86931f1f6986bd73a Mon Sep 17 00:00:00 2001 From: Daniel Napora Date: Sat, 1 Oct 2022 01:41:08 +0200 Subject: [PATCH] screen recording --- bin/mb-jgtools | 77 +++++++++++++++++++++++++++++++++++++++++++++++- bin/mb-screenrec | 77 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 153 insertions(+), 1 deletion(-) create mode 100755 bin/mb-screenrec diff --git a/bin/mb-jgtools b/bin/mb-jgtools index dab95ae..e7d4ed6 100755 --- a/bin/mb-jgtools +++ b/bin/mb-jgtools @@ -844,6 +844,16 @@ case $LANG in BACK="wróć" OPEN_SCR_DIR="Otwórz katalog ze zrzutami ekranu" CANCEL="Anuluj" + SCRNREC="Nagrywanie pulpitu" + FULLREC="Pełny ekran" + AREA="Obszar lub okno" + VIDEOSETTINGS="Ustawienia nagrywania" + AUDIO="Dźwięk" + FORMAT="Kontener (rozszerzenie)" + FRAMERATE="Klatki na sekundę (fps)" + REC_AUDIO="Nagrywaj dźwięk" + NO_AUDIO="Bez dźwięku" + OPEN_REC_DIR="Otwórz katalog z nagraniami" ;; es*) SCRNSHOTS="Captura Pantalla" @@ -857,9 +867,12 @@ case $LANG in BACK="atrás" OPEN_SCR_DIR="Abrir carpeta de capturas" CANCEL="Cancelar" + SCRNREC="Screen recording" + FULLREC="Full screen " + AREA="Selected Area or Window" ;; *) - SCRNSHOTS="Screenshot tool" + SCRNSHOTS="Screenshot" FULLSCR="Full screen" ACTIVE_WIN="Active window" ACTIVE_WIN_NO_DECOR="Active window (no decorations)" @@ -870,6 +883,16 @@ case $LANG in BACK="back" OPEN_SCR_DIR="Open screenshot directory" CANCEL="Cancel" + SCRNREC="Screen recording" + FULLREC="Full screen " + AREA="Selected Area or Window" + VIDEOSETTINGS="Recording settings" + AUDIO="Audio" + FORMAT="Container (file extension)" + FRAMERATE="Framerate (fps)" + REC_AUDIO="Record Audio" + NO_AUDIO="No Audio" + OPEN_REC_DIR="Open recordings dir" ;; esac jgtools_padding=${jgtools_padding:-0} @@ -892,6 +915,32 @@ VIEW="'viewnior $IMG'" THUMB="$(DISPLAY=:0 scrot -t 340x213 -o $HOME/.config/mabox/jgscrot.png -e 'echo $m')" +# Video recordings +CNF_FILE="$HOME"/.config/mabox/mb-screenrec.conf + +if [ ! -f $CNF_FILE ]; then +cat < ${CNF_FILE} +# Container (file extension): webm,mp4 or mkv +container=webm +# Record Audio? yes or no +record_audio=no +#Framerate (frames per second) +framerate=30 +EOF +fi +. "$CNF_FILE" + +if [ "$record_audio" == "yes" ];then + case "$LANG" in + pl*) AUD="z dźwiękiem";; + *) AUD="audio";; + esac +else + case "$LANG" in + pl*) AUD="bez dźwięku";; + *) AUD="noaudio";; + esac +fi mkconfigfile cat < ${MENU_ITEMS} @@ -905,6 +954,13 @@ cat < ${MENU_ITEMS} #  Multimonitor, scrot -m $IMG -e $VIEW ^sep()  $OPEN_SCR_DIR,xdg-open $(xdg-user-dir PICTURES)/screenshots +^sep($SCRNREC) +  $FULLREC,mb-screenrec -f +  $AREA,mb-screenrec -a +^sep() + +  $VIDEOSETTINGS [ $container / ${AUD} / $framerate fps ],^checkout(videosettings) +  $OPEN_REC_DIR,xdg-open $(xdg-user-dir VIDEOS)/Recordings ^sep()  $CANCEL esc,exit 1 ^tag(full) @@ -928,6 +984,25 @@ cat < ${MENU_ITEMS}  $SEC10,scrot -d 10 -u $IMG -e $VIEW ^sep() ⮜ $BACK,^back() +^tag(videosettings) +^sep($VIDEOSETTINGS) +$AUDIO [ ${AUD} ],^checkout(audio) +$FORMAT [ ${container} ],^checkout(format) +$FRAMERATE [ ${framerate} ],^checkout(framerate) +^tag(audio) +^sep($AUDIO) +$REC_AUDIO,mb-setvar record_audio=yes ${CNF_FILE};mb-jgtools screenshot ipc +$NO_AUDIO,mb-setvar record_audio=no ${CNF_FILE};mb-jgtools screenshot ipc +^tag(format) +^sep($FORMAT) +webm,mb-setvar container=webm ${CNF_FILE};mb-jgtools screenshot ipc +mkv,mb-setvar container=mkv ${CNF_FILE};mb-jgtools screenshot ipc +mp4,mb-setvar container=mp4 ${CNF_FILE};mb-jgtools screenshot ipc +^tag(framerate) +^sep($FRAMERATE) +30,mb-setvar framerate=30 ${CNF_FILE};mb-jgtools screenshot ipc +25,mb-setvar framerate=25 ${CNF_FILE};mb-jgtools screenshot ipc +24,mb-setvar framerate=24 ${CNF_FILE};mb-jgtools screenshot ipc EOF jgmenu --config-file=${CONFIG_FILE} --csv-file=${MENU_ITEMS} 2>/dev/null } diff --git a/bin/mb-screenrec b/bin/mb-screenrec new file mode 100755 index 0000000..0f2e4f8 --- /dev/null +++ b/bin/mb-screenrec @@ -0,0 +1,77 @@ +#!/bin/bash + +#: mb-screenrec - very simple screen recorder +CNF_FILE="$HOME"/.config/mabox/mb-screenrec.conf +. "$CNF_FILE" + +DATE=$(date +%Y%m%d_%H-%M-%S) +FRAMERATE=${framerate:-30} +EXT=${container:-webm} +AUDIO=${record_audio:-no} +SCREEN_SIZE=$(xdpyinfo | awk '/^ +dimensions/ {print $2}') +# Alternative: xrandr | grep 'current' | head -n1 | cut -d',' -f2 | tr -d '[:blank:],current' +RECDIR="$(xdg-user-dir VIDEOS)/Recordings" + +mkdir -p $RECDIR + +if [ "$AUDIO" == "yes" ];then +AUDIOCMD="-f pulse -ac 2 -i default" +else +AUDIOCMD="" +fi + +show_stop_icon () { + case "$LANG" in + pl*) STOP_INFO="Zatrzymaj nagrywanie";; + *) STOP_INFO="Click to stop recording";; + esac + yad --notification --image media-playback-stop --text "${STOP_INFO}" + kill $FFMPEG_PID + wait $FFMPEG_PID + + xdg-open $RECDIR +} + +rec_full () { + ffmpeg -f x11grab \ + -video_size $SCREEN_SIZE \ + -framerate $FRAMERATE \ + -i :0.0+0,0 ${AUDIOCMD} \ + ${RECDIR}/rec_${DATE}.${EXT} & + FFMPEG_PID=$! + + show_stop_icon + } + + +get_area () { + read X Y W H <<<"$(slop -l -b 3 --color=0.3,0.4,0.6,0.4 -f '%x %y %w %h')" +} +sel_cancelled () { + notify-send.sh -i mbcc "Error" "Selection was cancelled by keystroke or right-click." +} + +rec_area () { + get_area + if [ "$X" != "" ];then + ffmpeg -f x11grab \ + -video_size ${W}x${H} \ + -framerate $FRAMERATE \ + -i :0.0+${X},${Y} ${AUDIOCMD} \ + ${RECDIR}/rec_${DATE}.${EXT} & + FFMPEG_PID=$! + + show_stop_icon + else + sel_cancelled + fi +} + + + + +case "$1" in + -f|--fullscreen) rec_full;; + -a|--area) rec_area;; + *) ;; +esac