Nach ziemlich vielen Versuchen hab ich endlich ein kleines Script, mit dem man Screencasts erstellen kann. Wie ich in einem vorherigen Posting schon geschrieben habe, ist ffmpeg deprecated und wurde durch avconv ersetzt, das aber wieder andere Schalter kennt.
Viele Versionen, die ich im Internet gefunden habe, hatten massive Probleme mit der Audio/Video-Synchronisation. Keine Ahnung wieso … Ein simpler Audio-Shift wäre ja nicht das Problem gewesen (obwohl es nervig ist, das Delay später zu bestimmen), aber dass das Audio um einen Faktor von 0,15 schneller ist als das Video geht nunmal wirklich garnicht.
Zuerst dachte ich, meine Frame-Rate für das x264-Live-Capturing wäre zu hoch gewesen und dadurch stimmt die Framerate nicht. Nach ewigen Versuchen stellte ich fest, dass es an der Codec-Kombination x264 und mp3-lame liegt. Mit XVID funktioniert es erstaunlicherweise synchron.
Hier mein kleines Script, das ich dafür verwende:
#!/bin/bash avconv \ -f x11grab -r 15 -s 1920x1080 -i 0:0 \ -f alsa -i default \ -vcodec mpeg4 -vtag xvid \ -acodec libmp3lame -ab 128k -threads 4 \ -y $@
Ein anderes Problem war der Alsa-Treiber. Mit Pulse-Audio funktionierte nur -i default, ohne pulseaudio funktionierte -i plughw:0,0. Die Option -i pulse funktionierte bei mir überhaupt nicht, obwohl ich das auch oft ergoogelt hatte.
Ich werde das Script demnächst noch mit einer besseren Bitrate tunen … Die Qualität ist mir mit default-Bitrate zu schlecht …
Gestartet wird die Aufnahme simpel mit ./record.sh recording.avi
Hierbei ist zu beachten, dass die Extension .avi sein muss, da sonst ffmpeg nach dem Start mit einer Fehlermeldung abbricht.
Zum Reencoden, Filtern und Schneiden verwende ich immer avidemux, das wirklich hervorragend funktioniert.