#!/bin/bash
# Screen Recorder v2 by KuLuSz 2019 12 24
# Itt szerkesztheted az alap beállításokat ( csak a felsővessző közötti részt szerkeszd! )
# Bekapcsolás "true" , Kikapcsolás "false"
# Bemeneti alap beállitások:
SR_SAMPLE_RATE="44100"
SR_AUDIO_CHANNELS="2"
SR_FRAME_RATE="10"
# Kódolási alap beállítások:
SR_VIDEO_CODEC="libx264"
SR_VIDEO_BITRATE="600"
SR_AUDIO_CODEC="libmp3lame"
SR_AUDIO_BITRATE="128"
# Átalakítási alap beállítások:
SR_PRESET="ultrafast"
SR_OUTPUT_FRAME_WIDTH="640"
SR_OUTPUT_FRAME_HEIGHT="480"
SR_ASPECT_RATIO="true"
# Kimeneti alap beállítások:
SR_SAVE_DIR="/"
SR_SAVE_FILE_NAME="SR_v2-Video"
SR_SAVE_FILE_EXTENSION="mp4"
SR_MAX_FILE_SW="false"
SR_MAX_FILE_SIZE="8"
SR_MAX_FILE_UNIT="Mb"
SR_FILE_OVERWRITE="true"
SR_ADD_DATE="false"
export SR_THREAD="32"
###################################### Ez alatt NE írj át semmit! #####################################
export SR_TMP="/tmp/SRv2"
[ ! -e $SR_TMP ]&& mkdir -p $SR_TMP
ffmpeg -hide_banner -encoders|grep "V..\..." | grep "mpeg\|H\.\|VP\|theora\|wmv" | cut -f3- -d' ' |
sed 's/ / /g ; s: / : :g ; s/ part 2// ; s/(cod.*)// ; s/ AVC MPEG-4//' > $SR_TMP/video_codec_list1
export SR_VIDEO_CODEC_LIST="$(cat $SR_TMP/video_codec_list1 | cut -f1 -d' ')"
VCTIP="Állítható videó kodekkek:
$(cat $SR_TMP/video_codec_list1 | sed 's/(co.*[^)]//g')"
ffmpeg -hide_banner -encoders|grep "A..\..." | grep -v "= Audio\|[248]\-bit\|planar\|[aA][dD][pP]" | cut -f3- -d' ' |
sed 's/ / /g' > $SR_TMP/audio_codec_list1
export SR_AUDIO_CODEC_LIST="$(cat $SR_TMP/audio_codec_list1 | cut -f1 -d' ')"
ACTIP="Állítható audió kodekkek:
$(cat $SR_TMP/audio_codec_list1 | sed 's/(co.*[^)]//g')"
xrandr 1>& $SR_TMP/display
export SR_ALL_DISPLAY_SIZE="$(cat $SR_TMP/display | grep 'Screen' | grep -o "t.*, " | sed 's/ \|t\|\,//g')+0+0"
cat $SR_TMP/display | grep " connected" | sed 's/ connected//g' | cut -f-2 -d' ' | while read i;do
echo "$i" | cut -f1 -d' ' >> $SR_TMP/displays
done
if [ "$(cat $SR_TMP/displays | grep -c ".*")" -gt 1 ];then
echo "Mind" >> $SR_TMP/displays
DP='
SCREEN '$SR_TMP'/displays
input_size screen $SCREEN &
'
cat $SR_TMP/display | grep " con" | head -n 1 | cut -f3 -d' ' > $SR_TMP/vals
else
DP=' '
fi
ffmpeg -hide_banner -sources alsa | grep " def" | cut -f2 -d= | cut -f1 -d' ' > $SR_TMP/audio_card_list
echo "00:00:00" > $SR_TMP/stopper
echo "-" > $SR_TMP/ofs
input_size(){
if [ "$1" == "screen" ];then
if [ -z "$(cat $SR_TMP/display | grep "$2")" ];then
echo "$SR_ALL_DISPLAY_SIZE" > $SR_TMP/vals
else
cat $SR_TMP/display | grep " con" | grep "$2" | cut -f3 -d' ' > $SR_TMP/vals
fi
export SR_INPUT_SIZE="$(cat $SR_TMP/vals | cut -f1 -d'+')"
export SR_INPUT_POSITION="$(cat $SR_TMP/vals | grep -o '+.*' | sed 's/+/\,/2')"
MSG="$2 kijelző"
elif [ "$1" == "window" ];then
export SR_INPUT_SIZE="$(cat $SR_TMP/vals | grep "Wid\|He" | grep -o ":.*" | tr -d '\n' | sed 's/: // ; s/: /x/')"
export SR_INPUT_POSITION="$(cat $SR_TMP/vals | grep "Cor" | awk '{print $2}' | sed 's/+/\,/2')"
MSG="Az ablak"
fi
yaf-splash -text "$MSG kijelölve rögzítésre" -placement top-left -timeout 2 -close never &
echo "$SR_INPUT_SIZE" > $SR_TMP/isize
echo "$SR_INPUT_POSITION" > $SR_TMP/ipos
rm $SR_TMP/vals
}
export -f input_size
input_size screen
PRESETS="ultrafast veryfast faster fast medium slow slower veryslow"
EXT="3gp asf avi flv mkv mpg mp3 mp4 ogg ogv wav wma wmv"
recording(){
DATE="-$(date +'%Y_%m_%d-%H-%M-%S')"
if [ "$VREC" == "true" ];then
PRESET="-preset $SR_PRESET "
IPOS="$(cat $SR_TMP/ipos)"
VI="-f x11grab -skip_alpha 1 -skip_frame 3 -thread_queue_size $SR_THREAD -framerate $SR_FRAME_RATE -s $SR_INPUT_SIZE -i :0.0$IPOS "
VCB="-vcodec $SR_VIDEO_CODEC -b:v ${SR_VIDEO_BITRATE}K -pix_fmt yuv444p "
if [ "$SR_O_SIZE_SW" == "true" ];then
SCALE="-vf scale=$SR_OUTPUT_FRAME_WIDTH:$SR_OUTPUT_FRAME_HEIGHT "
if [ "$SR_ASPECT_RATIO" == "true" ];then
[ "$SR_OUTPUT_FRAME_WIDTH" -gt "$SR_OUTPUT_FRAME_HEIGHT" ]&& SCALE="-vf scale=$SR_OUTPUT_FRAME_WIDTH:-1 " || SCALE="-vf scale=-1:$SR_OUTPUT_FRAME_HEIGHT "
fi
else
SCALE=""
fi
else
VI="" VCB="" PRESET=""
fi
if [ "$AREC" == "true" ];then
AI="-f alsa -thread_queue_size $SR_THREAD -ar $SR_SAMPLE_RATE -ac $SR_AUDIO_CHANNELS -i default:CARD=$SR_AUDIO_CARD "
ACB="-acodec $SR_AUDIO_CODEC -b:a ${SR_AUDIO_BITRATE}K -af aresample=async=1 "
else
AI="" ACB=""
fi
[ "$SR_MAX_FILE_SW" == "true" ]&& FS="-fs $SR_MAX_FILE_SIZE$(echo $SR_MAX_FILE_UNIT | cut -c1) " || FS=""
[ "$SR_FILE_OVERWRITE" == "true" ]&& OW="-y " || OW=""
[ "$SR_ADD_DATE" == "true" -o -z "$SR_SAVE_FILE_NAME" ]&& NAME="$SR_SAVE_FILE_NAME$DATE.$SR_SAVE_FILE_EXTENSION" || NAME="$SR_SAVE_FILE_NAME.$SR_SAVE_FILE_EXTENSION"
[ "$SR_FILE_OVERWRITE" == "false" -a -e $SR_SAVE_DIR/$NAME ]&& NAME="$SR_SAVE_FILE_NAME$DATE.$SR_SAVE_FILE_EXTENSION"
if [ ! -e $SR_SAVE_DIR ];then
yaf-splash -text "A $SR_SAVE_DIR könyvtár nem létezik, hozd létre, vagy válassz másikat..." -placement center -timeout 20 -close never &
else
FILE="$(echo "$SR_SAVE_DIR/$NAME" | sed 's://:/:g ; s/ /\ /g')"
echo "" > $SR_TMP/error.log
FFREPORT=file=$SR_TMP/error.log:level=16 ffmpeg -hide_banner -hwaccel auto $VI$AI$VCB$ACB$SCALE$FS$PRESET$OW $FILE &
PID1="$!"
echo "$PID1" > $SR_TMP/rec_pid
if [ -e $FILE ];then
H="0" M="0" S="0"
sleep 1
while [ ! -e $SR_TMP/stop ];do
if [ ! -e /proc/$PID1 ];then
rm $SR_TMP/rec_pid
touch $SR_TMP/stop
[ "$(cat $SR_TMP/error.log | grep -c ".*")" -gt 2 ]&& cat $SR_TMP/error.log | tail -n +3 | sed 's/ \- /\n\t \- /g' > $SR_TMP/error2.log && echo '
'$SR_TMP'/error2.log ' | gtkdialog -s --center
fi
[ $S -eq 60 ]&& S="0" && M="$[$M+1]"
[ $M -eq 60 ]&& M="0" && H="$[$H+1]"
[ $S -lt 10 ]&& SS="0$S" || SS="$S"
[ $M -lt 10 ]&& MM="0$M" || MM="$M"
[ $H -lt 10 ]&& HH="0$H" || HH="$H"
echo "$HH:$MM:$SS" > $SR_TMP/stopper
echo "$(du -h $FILE | awk '{print $1}')b" > $SR_TMP/ofs
sleep 1
S="$[$S+1]"
done
fi
fi
}
export -f recording
export MD='
VREC true
if true show:VI if false hide:VI
if true show:VC if false hide:VC
if true show:VE if false hide:VE
hide:COD show:COD
hide:OUTPUT show:OUTPUT
'$DP'
'$SR_TMP'/isize SR_INPUT_SIZE
VI
AREC true
if true show:AI if false hide:AI
if true show:AC if false hide:AC
hide:COD show:COD
hide:OUTPUT show:OUTPUT
show:OUTPUT
SR_AUDIO_CARD '$SR_TMP'/audio_card_list
yaf-splash -text "$SOUND hankártya kijelölve rögzítésre" -placement top-left -timeout 2 -close never 1>& /dev/null
SR_SAMPLE_RATE '$SR_SAMPLE_RATE'
- 48000
- 44100
- 22050
SR_AUDIO_CHANNELS '$SR_AUDIO_CHANNELS'
- 1
- 2
AI
'$SR_VIDEO_CODEC' SR_VIDEO_CODEC
echo "$SR_VIDEO_CODEC_LIST" | sed "s/ /\n/g"
'$SR_VIDEO_BITRATE' SR_VIDEO_BITRATE
VC
'$SR_AUDIO_CODEC' SR_AUDIO_CODEC
echo "$SR_AUDIO_CODEC_LIST" | sed "s/ /\n/g"
'$SR_AUDIO_BITRATE' SR_AUDIO_BITRATE
AC
COD
'$SR_FRAME_RATE'
SR_FRAME_RATE
false SR_O_SIZE_SW
if true enable:E if false disable:E
SR_OUTPUT_FRAME_WIDTH
'$SR_OUTPUT_FRAME_WIDTH'
SR_OUTPUT_FRAME_HEIGHT
'$SR_OUTPUT_FRAME_HEIGHT'
'$SR_ASPECT_RATIO' SR_ASPECT_RATIO
false E
VE
'$SR_SAVE_DIR'
SR_SAVE_DIR
SR_SAVE_FILE_NAME '$SR_SAVE_FILE_NAME'
'$SR_SAVE_FILE_EXTENSION' SR_SAVE_FILE_EXTENSION
echo "'$EXT'" | sed "s/ /\n/g"
'$SR_MAX_FILE_SW' SR_MAX_FILE_SW
if true enable:SR_MAX_FILE_SIZE if false disable:SR_MAX_FILE_SIZE
if true enable:SR_MAX_FILE_UNIT if false disable:SR_MAX_FILE_UNIT
'$SR_ADD_DATE'
SR_ADD_DATE
'$SR_FILE_OVERWRITE' SR_FILE_OVERWRITE
false SR_MAX_FILE_SIZE
'$SR_MAX_FILE_SIZE'
'$SR_MAX_FILE_UNIT'
SR_MAX_FILE_UNIT false - Gb
- Mb
- Kb
00:00:00 '$SR_TMP'/stopper
- '$SR_TMP'/ofs
'$SR_PRESET' SR_PRESET
echo -e "'$PRESETS'" | sed "s/ /\n/g"
touch '$SR_TMP'/stop
disable:STOPBTN
enable:RECBTN
OUTPUT ' && gtkdialog --program=MD --center
touch $SR_TMP/stop && rm -r $SR_TMP