#!/bin/bash

# Dieses Skript verwendet avconv oder ffmpeg um den Bildschirm aufzunehmen.
# Wenn AUDIO=1 gesetzt ist wird auch der Ton aufgenommen.
# In die Variable $DEVICE wird der Bezeichner des Anschlusse eingetragen, von dem aufgenommen werden soll (siehe xrandr).
# Erster und einziger, optionaler, Parameter ist ein Präfix für die Datei, in die aufgenommen wird.
# Der Dateiname lautet: $prefix-YYYY-MM-DD-HH-MM-SS-nummer.mov
# Teilweise gibt es Probleme mit der Syncronität Bild<->Ton, daher dringen auf den Präsentationslaptops ausprobieren.
# Bei Verwendung von CODEC="x264" kann bei langsamen Geräten LOSSLESS=1 helfen, dann wird zwar die Ausgabedatei größer, aber der Rechenaufwand sollte geringer sein.
# Besser ist die Verwendung von CODEC="qtrle".
# Manchmal gibts libfaac nicht, dann eine der anderen Optionen für ACODEC ausprobieren.

DEVICE="VGA"
AUDIO=1
FPS=15
LOSSLESS=1
#CODEC="x264"
CODEC="qtrle"
#ACODEC="libfaac"
ACODEC="aac -strict -2"
#ACODEC="libvo_aacenc"
#ACODEC="pcm_s16le" # Uncompressed, only use, if nothing other works!

info=$(xrandr | grep $DEVICE)
if [ -z "$info" ] || (echo $info | grep disconnected)
	then
	echo "Device $DEVICE not connected or not existent - check xrandr"
	exit 1
fi
res="$(echo $info | grep -Eo '[0-9]+x[0-9]+')"
pos=$(echo $info | grep -Eo '\+[0-9]+\+[0-9]+')

if [ "$1" == "" ]
	then
	prefix=""
	else
	prefix=$1-
fi

counter=0
file=${prefix}$(date +%Y-%m-%d-%H-%M-%S)-$counter.mov
while [ -e $file ]
	do
	((counter=counter+1))
	file=${prefix}$(date +%Y-%m-%d-%H-%M-%S)-$counter.mov
done

if which avconv
	then
	prog=avconv
elif which ffmpeg
	then
	prog=ffmpeg
else
	echo "Weder avconv, noch ffmpeg gefunden!"
	exit
fi

if [ $AUDIO -eq 1 ]
	then
	audiocmd="-f alsa -ac 2 -i hw:0,0 -c:a ${ACODEC}"
else
	audiocmd="-an"
fi

if [ $LOSSLESS -eq 1 ]
	then
	losslesscmd="-qp 0 -crf 0 -tune stillimage"
fi

if [ $CODEC = "qtrle" ]
	then
	videocmd="-c:v qtrle -g 150 "
elif [ $CODEC = "x264" ]
	then
	videocmd="-c:v libx264 $losslesscmd -pix_fmt yuv420p -preset:v ultrafast"
else
	echo "No valid Codec, for valid codecs see header"
	exit 1
fi

cmd="$prog -f x11grab -s $res -r $FPS -i $DISPLAY$pos -r $FPS $audiocmd $videocmd $file"
echo "Command: $cmd"
$cmd
