screencap-ffmpeg.sh 2.17 KB
Newer Older
Lars Beckers's avatar
Lars Beckers committed
1 2 3 4 5
#!/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).
Moritz Holtz's avatar
Moritz Holtz committed
6
# Erster und einziger, optionaler, Parameter ist ein Präfix für die Datei, in die aufgenommen wird.
7
# Der Dateiname lautet: $prefix-YYYY-MM-DD-HH-MM-SS-nummer.mov
Lars Beckers's avatar
Lars Beckers committed
8
# Teilweise gibt es Probleme mit der Syncronität Bild<->Ton, daher dringen auf den Präsentationslaptops ausprobieren.
9 10
# 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".
11
# Manchmal gibts libfaac nicht, dann eine der anderen Optionen für ACODEC ausprobieren.
Lars Beckers's avatar
Lars Beckers committed
12 13

DEVICE="VGA"
Moritz Holtz's avatar
Moritz Holtz committed
14 15
AUDIO=1
FPS=15
16
LOSSLESS=1
17 18 19 20
#CODEC="x264"
CODEC="qtrle"
#ACODEC="libfaac"
ACODEC="aac -strict -2"
21 22
#ACODEC="libvo_aacenc"
#ACODEC="pcm_s16le" # Uncompressed, only use, if nothing other works!
Lars Beckers's avatar
Lars Beckers committed
23 24

info=$(xrandr | grep $DEVICE)
Moritz Holtz's avatar
Moritz Holtz committed
25 26 27 28 29 30
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]+')"
Lars Beckers's avatar
Lars Beckers committed
31 32 33 34
pos=$(echo $info | grep -Eo '\+[0-9]+\+[0-9]+')

if [ "$1" == "" ]
	then
Moritz Holtz's avatar
Moritz Holtz committed
35
	prefix=""
Lars Beckers's avatar
Lars Beckers committed
36
	else
Moritz Holtz's avatar
Moritz Holtz committed
37
	prefix=$1-
Lars Beckers's avatar
Lars Beckers committed
38 39
fi

Moritz Holtz's avatar
Moritz Holtz committed
40
counter=0
41
file=${prefix}$(date +%Y-%m-%d-%H-%M-%S)-$counter.mov
Moritz Holtz's avatar
Moritz Holtz committed
42 43 44
while [ -e $file ]
	do
	((counter=counter+1))
45
	file=${prefix}$(date +%Y-%m-%d-%H-%M-%S)-$counter.mov
Moritz Holtz's avatar
Moritz Holtz committed
46 47
done

Lars Beckers's avatar
Lars Beckers committed
48 49 50 51 52 53 54 55 56 57 58 59 60
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
61
	audiocmd="-f alsa -ac 2 -i hw:0,0 -c:a ${ACODEC}"
Lars Beckers's avatar
Lars Beckers committed
62 63 64 65
else
	audiocmd="-an"
fi

66 67 68 69 70
if [ $LOSSLESS -eq 1 ]
	then
	losslesscmd="-qp 0 -crf 0 -tune stillimage"
fi

71 72
if [ $CODEC = "qtrle" ]
	then
73
	videocmd="-c:v qtrle -g 150 "
74 75 76 77 78 79 80 81
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

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