Más de 11 años en Internet
->No hagas click en esta frase.

25 julio, 2011

Grabando sesiones de X11 con ffmpeg y x11grab


Si en GNU/Linux queréis grabar una sesión de escritorio la mejor herramienta que podéis utilizar es ffmpeg (haciendo uso el parámetro x11grab como fichero de entrada). Podéis instalarlo en entornos Ubuntu/Debian con un simple "sudo apt-get install ffmpeg".

No obstante mi experiencia dice que el ffmpeg compilado por Ubuntu es lentísimo a más no poder. Para haceros una idea, con dicho ffmpeg apenas superaba los 15 frames por segundo en un netbook que compré el año pasado por 230 euros. Está claro que es hardware barato, pero ni mucho menos es obsoleto o anticuado.

Aquí mi netbook: procesador Atom de doble núcleo a 1.6GHz... 
¿¡Y no pasa de 15 frames con el ffmpeg de Ubuntu!?

Puede que 15 fps dentro de lo que cabe sea una velocidad aceptable, pero me extraña muchísimo el malísimo rendimiento que obtiene esta aplicación sobre mi netbook. Me puse a googlear y vi que no era el único al que le pasaba y en una de las soluciones que observé se aseguraba que compilando tu mismo el ffmpeg conseguías un rendimiento muy superior. 

Así que hice eso y creo que el siguiente vídeo habla por sí sólo. Aquí me veis grabando una sesión de X11 mientras juego con mi PSP Go al MotorStorm:


Comando empleado para hacer la grabación:
~$ ffmpeg -f alsa -ac 1 -i pulse -f x11grab -r 30 -s 1024x600 -i :0.0 -s 480x272 -acodec pcm_s16le -vcodec libx264 -vpre lossless_ultrafast -threads 0 video_psp.mkv


Bueno, por si os pudiera interesar aquí os dejo los pasos que he seguido para compilar por mi cuenta el ffmpeg:

# Nos hacemos root e instalamos las dependencias que usaremos para compilar:
~$ sudo bash
~$ apt-get update 
~$ apt-get install build-essential checkinstall git checkinstall libfaac-dev libjack-jackd2-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev libtheora-dev libva-dev libvdpau-dev libvorbis-dev libx11-dev libxfixes-dev libxvidcore-dev texi2html yasm zlib1g-dev

# Compilamos e instalamos el códec x264
~$ cd /tmp 
~$ git clone git://git.videolan.org/x264 
~$ cd x264 
~$ ./configure --enable-static 
~$ make 
~$ checkinstall --pkgname=x264 --pkgversion="3:$(./version.sh | awk -F'[" ]' '/POINT/{print $4"+git"$5}')" --backup=no --deldoc=yes --fstrans=no --default

# Compilamos e instalamos libvpx
~$ cd /tmp 
~$ git clone git://review.webmproject.org/libvpx 
~$ cd libvpx 
~$ ./configure 
~$ make 
~$ checkinstall --pkgname=libvpx --pkgversion="1:$(date +%Y%m%d%H%M)-git" --backup=no --deldoc=yes --fstrans=no --default 

# Compilamos e instalamos la última versión de ffmpeg
~$ cd /tmp 
~$ git clone git://git.videolan.org/ffmpeg 
~$ cd ffmpeg 
~$ ./configure --enable-gpl --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-nonfree --enable-postproc --enable-version3 --enable-x11grab 
~$ make 
~$ checkinstall --pkgname=ffmpeg --pkgversion="5:$(date +%Y%m%d%H%M)-git" --backup=no --deldoc=yes --fstrans=no --default 
~$ hash x264 ffmpeg ffplay ffprobe 

# En el mismo directorio que compilamos ffmpeg, compilamos la herramienta qt-faststart:
~$ make tools/qt-faststart 
~$ checkinstall --pkgname=qt-faststart --pkgversion="$(date +%Y%m%d%H%M)-git" --backup=no \--deldoc=yes --fstrans=no --default install -D -m755 tools/qt-faststart /usr/local/bin/qt-faststart

No hay comentarios:

Publicar un comentario