miércoles, 1 de junio de 2011

Grabar vídeo del escritorio con un script: Grabar un streaming de televisión on line

En temas anteriores:  RecorMyDesktop   y  xVidcap   expliqué como grabar vídeo del escritorio usando esos dos programas gráficos; en este tema se va a tratar sobre como grabar un vídeo del escritorio ( de toda la pantalla ) con un script, basado en el comando ffmpeg, para grabar en el disco duro un streaming de canales de televisión on line ( lógicamente para ello también se pueden usar los dos métodos anteriormente citados; y también con este script se puede grabar un videotutorial de lo que hagamos sobre el escritorio) .

Lo primero es saber a que se llama streaming, y después saber en donde podemos conseguir ver emisiones de tv online en este tipo de emisión de vídeo.

Desde la dirección http://www.tutelevisiononline.com/ se puede acceder a muchas televisiones que emiten sus programas online, con este tipo de vídeo, por ejemplo:
antena3   http://www.tutelevisiononline.com/tv_online/canal/10237/Antena+3                                                                                                                              cuatro  http://www.tutelevisiononline.com/a-la-carta/1290/
tele5   http://www.tutelevisiononline.com/tv_online/canal/968/TeleCinco++
sexta   http://www.tutelevisiononline.com/tv_online/canal/10238/Sexta

una vez abierta la página del canal que queramos, nos ponemos sobre la ventana del vídeo y podemos pasar a verlo en modo de pantalla completa, y luego con los pasos siguientes podemos grabar el vídeo en el disco duro de nuestro pc.



------------------------

Requerimientos previos:

1- Hay que instalar los siguientes paquetes  libgstreamer0.10-dev y libgstreamer0.10-0 desde synaptic.

2- Crear y guardar este pequeño script ( y crear un acceso directo a él en el escritorio o el panel para que sea fácilmente ejecutable ) :

#!/bin/bash
echo Script para grabar vídeo y sonido del escritorio
echo ..dentro de 12 seg se inicia el script; minimiza la terminal para que no se grabe en el vídeo
sleep 12s
cd /home/usuario
ffmpeg -t 01:05:22 -f alsa -ac 2 -i pulse -f x11grab -r 30 -s 1024x600 -i :0.0 -acodec pcm_s16le -vcodec libx264 -vpre lossless_ultrafast -threads 0   -y /home/usuario/Escritorio/mivideo.mkv

( Todo lo que va desde ffmpeg hasta .mkv - en color morado - debe ser escrito en una línea, aunque en el blog aparezca en varias).

3- En Control de Volumen de Pulseaudio hay que seleccionar monitor de audio interno : esta explicado en pavucontrol.

-------------------------------------

En este script podemos hacer algunas modificaciones a nuestro gusto:

a ) -s 1024x600  Indica la resolución: ancho x alto, en este ejemplo sería: 1024x600 , pero puede ser: 1024x768, hd720, 640x480, svga

b ) -r 30 es la tasa de frames por segundo.

c ) tiempo de inicio: en el que se puede cambiar sleep 12s por los segundos que se quiera que tarde en empezar a grabar para dar tiempo a minimizar la terminal y que no salga en el vídeo.

d ) dirección y nombre: /home/usuario/Escritorio/mivideo.mkv es la dirección donde se guardará el archivo, y el nombre de dicho archivo, que se grabará en formato .mkv

e) si al nombre del archivo en vez de mivideo.mkv le llamo mivideo_`date +%d%B%Y-%H-horas-%M-minutos`.mkv  se graba un vídeo con la fecha, hora y minutos en los que se ha grabado, en su nombre (por ejemplo mivideo_1junio2011-19-horas-03-minutos.mkv ), de forma que si luego ejecuto de nuevo el script no se sobreescribe el vídeo que hayamos grabado anteriormente.

f) tiempo de duración de la grabación.  -t 01:05:22   es el tiempo de duración de la grabación en formato hora-minutos-segundos: hh:mm:ss , en este ejemplo para que la grabación dure 1 hora, 5 minutos y 22 segundos.

----------------------------------

Uso:

1- Abrimos con gedit, y modificamos a nuestro gusto el script, en las opciones de a)tiempo de inicio y c) tiempo de duración de la grabación; guardamos los cambios, y cerramos el script.

2- Abrimos en Firefox la dirección de la televisión online que queramos grabar.

3- Ejecutamos el script desde el enlace directo que creamos, se abrirá la terminal con el script, y durante el tiempo que hemos especificado como tiempo de inicio, nos debe de dar tiempo para que minimizemos la terminal, volvamos a la ventana de Firefox, nos pongamos sobre la ventana del vídeo y podamos pasar a verlo en modo de pantalla completa; luego del tiempo a) de inicio del script se empezará a grabar en el disco duro el vídeo que estamos viendo, en un archivo .mkv, durante el tiempo c) que hemos especificado en el script, y al cabo de ese tiempo* se cerrará el script, y ya tendremos creado el archivo .mkv en la dirección b) que pusimos en el script.

4- Abrimos el archivo .mkv con Videolan ( con otros reproductores multimedia solo se reproduce el vídeo, sin el sonido, al menos en mi pc ) para ver lo que hemos estado grabando.

*Si antes de que pase el tiempo que hemos especificado en el script queremos que se deje de grabar, podemos maximizar la terminal y teclea la letra q para cerrar la terminal, tras lo cual podremos reproducir el vídeo que hemos grabado.

------------------------------

Tema hecho gracias a la desinteresada ayuda de KernelMX , por lo que desde aquí le reitero mi agradecimiento.

foro-ubuntu-guia: Grabar-streaming-de-televisión-on-line-solucionado-con-un-script

———---------------------------------------------------———————-

7 comentarios:

  1. Hola, yo no uso pulse audio, a mi me iba mal , como se habria de modificar el script? Un saludo.

    ResponderEliminar
  2. hatteras a mi no me graba el audio a pesar de que hice todo lo que pones.

    Saludos

    ResponderEliminar
  3. Quizás en: http://hatteras.wordpress.com/2010/10/15/controlando-el-sonido/
    encontréis la solución

    ResponderEliminar
  4. Hola Hatteras,

    he estado intentando grabar mi pantalla con sonido con h264. He compilado ffmpeg con soporte para h264 de la forma indicada en: http://ubuntuforums.org/showpost.php?p=9868359&postcount=1289

    Todo ha ido correctamente y al cabo del rato la he compilado y he probado si funcionaba ffmpeg.

    Si ejecuto: ffmpeg -f x11grab -s 1280x800 -r 25 -i :0.0 -sameq /ruta/archivo.mkv me graba correctamente el vídeo sin ningún problema.

    En cambio si intento utilizar h264 de la forma que tú indicas no funciona.

    Utilizo Linux Mint 9 - Isadora.
    Configuración de compilación ffmpeg: configuration: --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-libfaac --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-x11grab --enable-libmp3lame --enable-libvpx

    Error:

    [libx264 @ 0xa236740] constant rate-factor is incompatible with 2pass.
    Output #0, mpeg, to '/home/rigolox/video.mpeg':
    Stream #0.0: Video: libx264, yuv420p, 1024x600, q=0-69, pass 1, pass 2, 200 kb/s, 90k tbn, 29.97 tbc
    Stream #0.1: Audio: pcm_s16le, 48000 Hz, 2 channels, s16, pass 1, pass 2, 1536 kb/s
    Stream mapping:
    Stream #1.0 -> #0.0
    Stream #0.0 -> #0.1
    Error while opening encoder for output stream #0.0 - maybe incorrect parameters such as bit_rate, rate, width or height

    Tienes alguna idea de porque sucede? He quitado la opción -r 30 por lo que dice de rate-factor is incompatible with 2pass.

    Por lo que podido ver es cosa del preset de video de ffmpeg con h264. Los que me funcionan son: baseline y los del ipod. Los que no funcionan son: lossless_fast, lossless_max, lossless_medium, lossless_slower, lossless_slow y lossless_ultrafast

    Como compilaste tú ffmpeg con soporte para h264 y que te funcionase el preset lossless_ultrafast? Hiciste algún otro paso que se me haya pasado?

    Te pido perdón por haber escrito este tostón. Si tienes algún enlace que me pueda ayudar será bienvenido.

    Gracias por adelantado.

    ResponderEliminar
  5. Hola de nuevo,

    después de varias horas lo he conseguido solucionar con -fpre /ruta/archivo/preset en vez de -vpre.

    Ahora el problema lo tengo con el sonido. Me capta el sonido pero parece que lo capta por el micrófono del ordenador (es un portátil) en vez del sonido del sistema, por lo que se escucha mal, con un pitido de fondo. Es normal que capte el sonido de esta forma o estoy haciendo algo mal?

    Gracias de nuevo.

    NaCl u2

    ResponderEliminar
  6. Hola, mira que soy pesado, eh! :)

    Parece ser que ya he solucionado el tema del sonido también. Cuando se empieza la grabación se va a control de sonido de pulse audio y se mira que opción de grabación se tiene en la pestaña Grabación. Si se tiene: “Internal Audio Analog Stereo” grabará el sonido que capta el micrófono, si lo cambiamos a “Monitor of Internal Audio Analog Stereo“ ya nos grabará el sonido interno de lo que estemos reproduciendo.

    Seguramente sea recomendable volver a cambiarlo por si interfiere en algún programa de grabación de sonido.

    Me tiene mosqueado porque no funciona los presets de ffmpeg sin indicarle la ruta completa, pero bueno, ya será otro día.

    NaCl u2

    ResponderEliminar
  7. Rigolox: Eso mismo esta explicado en http://hatteras.wordpress.com/2010/10/15/controlando-el-sonido/ en el apartado sobre pavucontrol

    ResponderEliminar

A la vez que haces un comentario, por favor da una puntuación al tema: malo, normal, bueno o muy bueno.
Gracias.