2014-11-08

Capturar pantalla en video con FFmpeg

bash script para Linux debian-based

A pesar de que en Comandos útiles de FFmpeg ya publiqué cómo capturar la pantalla completa en video directamente pasando los valores por consola, la idea de este script es que se encargue de hablar con FFmpeg para simplificarte las cosas.
Funciona en cualquier distro basada en debian (Linux Mint, Ubuntu, etc) con los paquetes necesarios instalados (los cuáles podrán ver al final de esta entrada) y toma todos los valores que necesite automáticamente.
El mismo da la posibilidad de definirle a cuántos FPS (frames per second, cuadros por segundo) y de cuánto tiempo se quiere realizar la captura, así como también el lugar en donde se guardará el archivo de video resultante, por supuesto. En caso de no definirse la salida, el video se almacenará en formato mkv en el home o carpeta personal con la fecha y hora de inicio de grabación.

fah_capture-screen - Ayuda y modo de empleo

Entonces, para ponerlo en marcha tendremos que crear un archivo llamado fah_capture-screen dentro de /usr/local/bin/:
cd /usr/local/bin && sudo nano fah_capture-screen

En el cuál pegaremos (Ctrl+Shift+V) el código del script:
#!/bin/bash

# Versión 20141108_2

# Ayuda y modo de empleo
mostrarAyuda () {
   echo -e "\nfah_capture-screen: Captura pantalla completa en video."
   echo -e "\nUSO:"
   echo -e "\tfah_capture-screen [ -f <VALOR> | -t <VALOR> | -h | -o <SALIDA[.mkv|.mp4|.avi]> ]"
   echo -e "\nOPCIONES:"
   echo -e "\t-f\tFPS (Frames Por Segundo). Por defecto: 30."
   echo -e "\t-h\tAyuda y modo de empleo."
   echo -e "\t-o\tArchivo de salida donde se almacenará la captura. Por defecto: \"~/FECHA_HORA.mkv\""
   echo -e "\t-t\tTiempo hasta finalizar la captura, en segundos o del modo \"hh:mm:ss[.xxx]\". Por defecto: infinito."
   echo -e "\nEJEMPLOS:"
   echo -e "\tfah_capture-screen"
   echo -e "\tfah_capture-screen -o ./videos/mivideo.mp4"
   echo -e "\tfah_capture-screen -f 60 -o mivideo.mkv"
   echo -e "\tfah_capture-screen -f 25 -t 30 -o mivideo.avi"
   echo -e ""
}

# Procesamiento de parámetros
while getopts 'f:t:o:h' OPCION; do
   case $OPCION in
      f)
         FPS=$OPTARG
         ;;
      t)
         TIME=$OPTARG
         ;;
      o)
         OUTPUT=$OPTARG
         ;;
      h)
         mostrarAyuda
         exit 0;
         ;;
      \?)
         echo -e "\nERROR: -$OPTARG no es un parámetro válido."
         mostrarAyuda
         exit 1;
         ;;
       :)
         echo -e "\nERROR: Opción -$OPTARG requiere un parámetro."
         mostrarAyuda
         exit 1;
         ;;
   esac
done

# Valores por defecto
FPS=30
OUTPUT="$HOME/"$(date +"%Y%m%d_%H%M%S")".mkv"
LINE=$(xrandr -q | grep Screen);
WIDTH=$(echo ${LINE} | awk '{ print $8 }');
HEIGHT=$(echo ${LINE} | awk '{ print $10 }' | awk -F"," '{ print $1 }');

if [ ${TIME} ]; then
   ffmpeg -f x11grab \
    -r ${FPS} \
    -s ${WIDTH}x${HEIGHT} \
    -i ${DISPLAY} \
    -t ${TIME} \
    -vcodec libx264 \
    -vpre lossless_ultrafast \
    -y ${OUTPUT}
else
   ffmpeg -f x11grab \
    -r ${FPS} \
    -s ${WIDTH}x${HEIGHT} \
    -i ${DISPLAY} \
    -vcodec libx264 \
    -vpre lossless_ultrafast \
    -y ${OUTPUT}
fi
Cerramos el archivo (Ctrl+X) y aceptamos guardar las modificaciones cuando nano nos lo pregunte.

Luego le daremos permisos de ejecución y de lectura/escritura para evitar tener que usar sudo cuando queramos ejecutarlo:
sudo chmod +x fah_capture-screen && sudo chmod 775 fah_capture-screen

Y por último lo ponemos en práctica:
cd ~ && fah_capture-screen
Para finalizar la grabación: Ctrl+C. Esto guardará el video capturado en el home o carpeta personal.


EDIT 20141109: Agrego video de prueba del script ^_^ (música by Mariano Babich)


Nota importante: Estos paquetes pueden ser necesarios para el correcto funcionamiento de FFmpeg con casi todas sus funciones:
sudo apt-get install -y build-essential ubuntu-restricted-extras ffmpeg libavcodec-extra-53

Y estos son más a elección, depende de lo que vayan a hacer, puede q nunca los necestien, pero por las dudas se los dejo:
sudo apt-get install x264 libx264-123 libx264-dev

No hay comentarios.:

Publicar un comentario