Reproducción de video en el terminal mediante OMXPlayer

Siguiendo un poco con la última entrada donde aprendimos a bajarnos videos de YouTube, hoy voy a explicaros cómo ver videos directamente desde el terminal sin necesidad de tener instalado un mediacenter.

Esto se consigue muy fácilmente mediante OMXPlayer. Y digo muy fácilmente porque ya viene instalado por defecto en Raspbian, así que si tienes esta distribución instalada no hace falta nada más.

Para ver un video podemos ejecutar el comando omxplayer <video> y veremos cómo se empieza a reproducir.

Si tenéis conectada la Raspberry a un televisor o a un monitor con altavoces mediante HDMI, entonces también podréis escuchar el audio. Si no, podéis simplemente conectar unos altavoces o auriculares a la salida de audio de la Raspberry.

Aquí os dejo unos pocos comandos útiles que os servirán durante la reproducción del vídeo:

  • ESPACIO: pausa
  • CURSOR IZQUIERDO: rebobina 30 segundos
  • CURSOR DERECHO: adelanta 30 segundos
  • CURSOR ARRIBA: adelanta 10 minutos
  • CURSOR ABAJO: rebobina 10 minutos
  • o: capítulo siguiente
  • i: capítulo anterior
  • w: muestra los subtítulos
  • s: oculta los subtítulos
  • ESC / q: salir

Os habréis percatado de que todo lo que hubiera en el terminal antes de ejecutar omxplayer sigue ahí, lo que quizás pueda ser un poco molesto. Para evitarlo basta con usar la opción omxplayer <video> -b

OMXPlayer cuenta con muchas más opciones. Si tenéis curiosidad podéis descubrirlas ejecutando man omxplayer en el terminal.

Anuncios

Cómo descargar videos de Youtube en tu Raspberry Pi

¿Habéis visto un video alojado en YouTube que os gustaría descargar y ver cuando queráis en vuestra querida Raspberry? Si es así estáis en el sitio indicado porque hoy os voy a explicar cómo hacerlo mediante youtube-dl

Como casi todo lo que cuento aquí, estas instrucciones son totalmente válidas para cualquier ordenador corriendo Debian. Vamos al lío.

  1. Ejecuta el comando sudo apt-get install youtube-dl para instalarlo.
  2. ¡Ya está!

¿Verdad que es fácil?. Para descargar un video nada tan sencillo como escribir youtube-dl seguido de la URL del video que queramos descargar. Vamos a ver esto con un ejemplo.

  1. Vamos a YouTube, buscamos el video que queremos descargar y le damos a compartir. Ahí vemos que su url es (por ejemplo) http://youtu.be/63fCoDvyF2E
  2. Vamos a la terminal y escribimos youtube-dl http://youtu.be/63fCoDvyF2E y el video empezará a descargarse automáticamente.
  3. Si hacemos un ls -lh veremos que el video se ha guardado como un fichero .mp4 y que ocupa 8,5MB (en este caso).

youtube-dl cuenta con muchísimas opciones para descargar el video con distintas calidades y formatos, o descargar los subtítulos, e incluso le podemos pasar una lista de reproducción y se la bajará enterita. Genial ¿verdad? Podéis ver todas las opciones disponibles escribiendo youtube-dl -h o yendo a su sitio web http://rg3.github.io/youtube-dl/

Ahora sólo queda añadir el video a nuestra librería de XBMC para poder verlo tranquilamente en nuestro televisor o monitor. ¿Y si no tienes XBMC y quieres reproducirlo directamente desde la terminal? Eso lo veremos en la próxima entrada.

Internet en la Raspberry Pi usando Android

Si quieres tener internet en tu Raspberry Pi y no tienes un adaptador WiFi, pero sí que un dispositivo Android (teléfono o tablet) estás de suerte porque es muy sencillo compartir la conexión de ambos mediante cable.

A mi me ha venido muy bien porque tengo dos Raspberry’s pero solamente un dongle USB, así que ahora puedo hacer cacharreos en la de pruebas sin tener que desconectar el WiFi de la principal.

Para ello necesitamos lo siguiente:

  • Raspberry pi (por extensión también funcionaría con cualquier ordenador con debian).
  • Dispositivo Android (smartphone o tablet) que permita hacer tethering (compartir conexión).
  • Cable para conectar ambos dispositivos.

En mi caso tengo una tablet medio basurilla pero que para hacer pruebas es más que suficiente. Pasamos a realizar la magia:

  1. Conecta el cable al Android y a un puerto USB de la Raspberry (puede ser incluso en un hub de usb).
  2. Arranca la raspberry (si no lo estaba ya).
  3. Activa el tethering en el dispositivo Android. Varía según el modelo y la versión. En mi caso se llama Anclaje de USB y está bajo los ajustes de red y solo aparece cuando detecta un ordenador al otro lado del cable.
  4. Ahora en la raspberry escribe el comando lsusb y vemos que la tablet aparece como un dispositivo llamado Google Inc, y si hacemos un ifconfig verificamos que una de las interfaces de red es usb0.
  5. Ejecuta el comando sudo dhclient usb0 y después otra vez ifconfig y vemos que ya tiene una IP asignada (en mi caso 192.168.42.127)
  6. Prueba a ejecutar un ping a google o a cualquier otra página.

Ya está ¿verdad que es fácil? La única lata es que este comando lo tendréis que ejecutar cada vez que apaguéis la Raspberry o desconectéis el cable, pero es un pequeño sacrifico con tal de tener nuestro cacharro conectado a la red.

Articulo resumen y guía rápida

  1. Instalar Raspbmc en la tarjeta SD mediante el método que más nos guste. Enlace: http://www.raspbmc.com/download/
  2. Iniciar el sistema conectado con el cable de red y todos los discos enchufados, y esperar a que termine de configurarse.
  3. Conectar el dongle WiFi y reiniciar habiendo desconectado el cable de red.
  4. Configuración adicional de XBMC:
    1. Habilitar bob light support (para hacer un ambilight en el futuro).
    2. Cambiar región.
    3. Cambiar país.
    4. Deshabilitar Ignorar los artículos al ordenar (cuestión de gustos).
    5. Habilitar Permitir el renombrado y borrado de archivos (para poder borrar archivos después de verlos).
    6. Habilitar Actualizar la colección en el arranque (nunca viene mal).
    7. Seleccionar la acción por defecto: mostrar información (nuevamente, cuestión de gustos).
    8. Idioma de subtitulo preferido: english (cada cual que elija el idioma que quiera).
    9. Servicio de tv por defecto: conseguir más > opensubtitles.org > instalar (para poder bajar los subtítulos de las series).
    10. Seleccionar ubicación para el tiempo (me gusta poder ver la previsión).
    11. Instalar Add-on de Youtube (para poder ver los trailers).
    12. Habilitar AirPlay (aunque aun no he sido capaz de hacerlo funcionar).
  5. Reiniciar el sistema para aplicar los cambios.
  6. Añadir los vídeos a la biblioteca indicando si las carpetas son de series o de películas. Enlace: Añadir contenido a XBMC
  7. Revisar si hay series o películas que ha cogido mal o no ha reconocido y arreglarlo.
  8. Actualizar el sistema mediante el comando sudo apt-get update && sudo apt-get upgrade
  9. Instalar transmission mediante el comando sudo apt-get install transmission-daemon Enlace: Instalación de transmission
  10. Parar transmission-daemon mediante sudo /etc/init.d/transmission-daemon stop para configurar el fichero /var/lib/transmission-daemon/info/settings.json y luego re-arrancarlo con sudo /etc/init.d/transmission-daemon start
  11. Instalar sendemail mediante el comando sudo apt-get install libio-socket-ssl-perl libnet-ssleay-perl perl sendemail Enlace: Recibir un email al finalizar una descarga
  12. Arreglar sendemail con sudo nano +1907 /usr/bin/sendemail y modificar la linea donde dice SSLv3 TSLV1 para dejar solamente SSLv3
  13. Instalar flexget mediante sudo apt-get install python python-setuptools ; sudo easy_install flexget mechanize transmissionrpc
  14. Comprobar que flexget se ha instalado bien ejecutando flexget -V
  15. Crear un directorio de configuracion de flexget con mkdir /home/pi/.flexget y editar la configuracion con nano /home/pi/.flexget/config.yml
  16. Editar el fichero config.yml para que envíe un email al encontrar un fichero, la frecuencia del daemon y añadir todas las series a seguir. Enlace: Instalación de flexget y configuración (I): series.
  17. Comprobar la sintaxis de la configuracion mediante flexget check
  18. Hacer un test de descarga mediante flexget –test execute
  19. Indicar el punto donde tiene que empezar a descargar las series mediante flexget series begin “<SERIE>” S<temporada>E<capitulo>” Enlace: Cómo decirle a flexget que ya hemos visto un capítulo
  20. Iniciar el daemon mediante flexget daemon start -d Enlace: FlexGet en Daemon mode y Scheduling
  21. Instalar curl
  22. Configurar fichero de download_complete para mover los archivos .mkv, borrar carpeta bajada y actualizar la librería con curl. Enlace: Movimientos de ficheros y auto-actualizacion de librería
  23. Ejecutar ssh-keygen para generar las claves y añadir la clave pública de nuestro equipo al archivo /home/pi/.ssh/authorized_keys de la raspberry. Enlace: Utilización de claves pública y privada

 

Contenido fichero download_complete.sh

#!/bin/bash

#Se envia un email de que ha finalizado la descarga
USUARIO="<usuario>"
PASSWORD="<contraseña>"
DIRECCION="$USUARIO@gmail.com"
ASUNTO="[Transmission] Descarga finalizada"
MENSAJE="Se ha completado la descarga del trabajo \n$TR_TORRENT_NAME\nHora: $TR_TIME_LOCALTIME\nFolder: $TR_TORRENT_DIR\nID: $TR_TORRENT_ID"
SERVIDOR="smtp.gmail.com:587"
sendemail -f $DIRECCION -t $DIRECCION -u $ASUNTO -m $MENSAJE -s $SERVIDOR -xu $USUARIO -xp $PASSWORD -v -o username=$USUARIO -o password=$PASSWORD -o tls=yes

#mueve los ficheros mkv de la carpeta de descarga a su carpeta padre
find "$TR_TORRENT_DIR/$TR_TORRENT_NAME" -name "*.mkv" ! -name *sample* -exec mv {} "$TR_TORRENT_DIR" \; | logger

#borra los archivos y carpetas que no son mkv de la carpeta de descarga
find "$TR_TORRENT_DIR/$TR_TORRENT_NAME" ! -name "*.mkv" -exec sudo rm -r {} \; | logger #debian-transmission tiene que ser sudoer para borrar

#Actualizacion de la libreria de video
curl --data-binary '{ "jsonrpc": "2.0", "method": "VideoLibrary.Scan", "id": "mybash"}' -H 'content-type: application/json;' http://localhost/jsonrpc

 

Contenido fichero config.yml

schedules:
 - tasks: '*'
 interval:
 hours: 2

tasks:

  tv-shows:
    series_premiere: no

    email:
      from: <usuario>@gmail.com
      to: <usuario>@gmail.com
      smtp_host: smtp.gmail.com
      smtp_port: 587
      smtp_username: <usuario>
      smtp_password: <contrasena>
      smtp_tls: yes

    transmission:
      path: /media/e864a2d9-5479-41a6-852f-4dbd2166cd12/tvshows
      host: localhost
      port: 9091
      username: transmission
      password: <contraseña de transmssion>
      addpaused: no

    rss: http://rss.thepiratebay.se/208

    thetvdb_lookup: yes

    quality: 720p HDTV h264

    regexp:
      reject:
        - SUB
        - DUAL
        - WEB
        - CENSORED
        - SCREENER
        - LATINO
        - PSYPHER

    content_filter:
      reject:
        - '*.avi'
        - '*.mpg'
        - '*.mpeg'

    series:
      - 12 Monkeys:
        path: "/media/My\ Book/tvshows/12 Monkeys"
        set:
          tvdb_id: 272644
      - 2 Broke Girls:
        path: "/media/My\ Book/tvshows/2 Broke Girls"
        set:
          tvdb_id: 248741

Movimientos de ficheros y auto-actualizacion de librería

En este punto, lo único que me falta para terminar de automatizar todo el sistema es que los ficheros descargados se sitúen donde yo quiero, que se borren los ficheros adicionales en caso de haberlos y que la librería se actualice.

Todo ello lo haremos mediante el fichero download_complete.sh que creamos y que le indicamos a transmission en el fichero de configuración que debía de ejecutar cada vez que terminara una descarga.

A continuación os dejo el código del fichero que yo utilizo para que podáis copiarlo y modificarlo a vuestro gusto.

#!/bin/bash
#sirve para indicarle a la shell el interprete que debe usar para este script

#Se envia un email de que ha finalizado la descarga, indicando información basica
USUARIO=“<vuestro usuario de gmail>
PASSWORD=“<vuestra contraseña de gmail>
DIRECCION=“$USUARIO@gmail.com”
ASUNTO="[Transmission] Descarga finalizada"
MENSAJE="Se ha completado la descarga del trabajo \n$TR_TORRENT_NAME\nHora: $TR_TIME_LOCALTIME\nFolder: $TR_TORRENT_DIR\nID: $TR_TORRENT_ID"
SERVIDOR="smtp.gmail.com:587"
sendemail -f $DIRECCION -t $DIRECCION -u $ASUNTO -m $MENSAJE -s $SERVIDOR -xu $USUARIO -xp $PASSWORD -v -o username=$USUARIO -o password=$PASSWORD -o tls=yes

#mueve los ficheros .mkv de la carpeta de descarga a su carpeta padre
find "$TR_TORRENT_DIR/$TR_TORRENT_NAME" -name "*.mkv" ! -name *sample* -exec mv {} "$TR_TORRENT_DIR" \; | logger

#borra los archivos y carpetas que no son mkv de la carpeta de descarga
find "$TR_TORRENT_DIR/$TR_TORRENT_NAME" ! -name "*.mkv" -exec sudo rm -r {} \; | logger #debian-transmission tiene que ser sudoer para borrar

#Actualizacion de la libreria de video
curl --data-binary '{ "jsonrpc": "2.0", "method": "VideoLibrary.Scan", "id": "mybash"}' -H 'content-type: application/json;' http://localhost/jsonrpc

Un par de puntualizaciones:

  • La primera es que (obviamente) tendréis que añadir vuestro usuario y contraseña de gmail en las dos variables que he marcado en rojo.
  • También, tal como indico en un comentario, para que el script sea capaz de borrar la carpeta creada durante la descarga así como los ficheros basura, el usuario debian-transmission debe de ser sudoer. Es decir, debemos indicarle al sistema que dicho usuario puede invocar sudo. Eso se hace editando el fichero /etc/sudoers y añadiendo la linea debian-transmission ALL=(ALL) NOPASSWD: ALL. Vereis que ya hay una linea (al menos) para el usuario root, así que podéis ponerla debajo.
  • Lo último es que para actualizar la librería hago una llamada mediante curl y en mi caso al menos este no estaba instalado. A estas alturas no deberíais tener problema en saber que para instalarlo se hace mediante el comando sudo apt-get install curl.

Pues creo que eso es todo. En la próxima entrada haré un rápido resumen de todos los pasos a seguir para coger una raspberry vacía y dejarla tal como la tengo yo ahora, totalmente automatizada.

FlexGet en Daemon mode y Scheduling

Tras la instalación de FlexGet en Raspbmc me he dado cuenta de que las ejecuciones que tengo planificadas en cron no funcionan. No sé si esto es porque esté de algún modo desactivado, pero voy a aprovechar y probar una de las últimas funcionalidades que le añadieron a FlexGet que es funcionar el modo daemon (o demonio). Esto viene siendo simplemente que funciona como un proceso de background.

Para ver si ya tenemos el demonio corriendo ejecutamos el comando flexget daemon status

flexget daemon statusMe dice que efectivamente lo tengo desactivado. Ahora voy a añadir unas planificaciones (schedules) a la tarea para decirle cuándo quiero que se ejecute, así que edito el fichero de configuración de flexget con nano /home/pi/.flexget/config.yml y añado lo siguiente:

SchedulesLo que he puesto básicamente es que ejecute todas (*) las tareas cada dos horas. Si por ejemplo yo quisiera que se ejecutara la tarea tv-shows todos los martes a la una de la tarde, lo que pondría sería:

Planificacion semanalFácil ¿no? Ahora guardo y salgo de nano y hago una comprobación con flexget check para ver que la sintaxis es correcta.

Warning inofensivoComo veis me ha dado un warning de que al parecer me falta un : en una linea, pero he visto en la página de FlexGet que esto es normal de momento, así que podemos ignorarlo.

Ahora voy a activar el demonio con el comando flexget daemon start -d (con el -d lo mandamos al background o segundo plano).

Iniciamos el demonioPerfecto, parece que el demonio está corriendo. Ahora por último voy a modificar el sistema para que inicie el demonio cada vez que haga un reinicio y así que no tengo que preocuparme. Eso se hace en el crontab, que abrimos con crontab -e

CrontabY ya está. Guardamos el crontab y listo. Ahora nuestro demonio estará buscando las actualizaciones de las fuentes RSS y las descargará automáticamente en caso de que deba hacerlo.

Instalación, configuración y pruebas en RaspBMC

Como no quería escribiros otra entrada fallida, el siguiente intento de hacer funcionar XBMC sobre Raspbian no lo documenté, pero creo que es suficiente con decir que tampoco funcionó.

La instalación fue bien, sin problemas, siguiendo el último de los métodos que comenté en la entrada anterior. Sin embargo, una vez dentro de XBMC el sistema se comportaba de forma errática, los menús parpadeaban y había muchas letras que no podían leerse. Puede resumirse en que no era para nada utilizable. La siguiente opción que se me ocurrió fue probar otra distribución.

Las dos opciones que me quedaban disponibles (aparte de XBian) eran OpenElec y RaspBMC. Lo bueno que tiene OpenElec es que es una distribución creada desde cero para funcionar como gestor multimedia en la raspberry pi (bueno, y en otros sistemas), pero lo malo es que al no estar basada en Debian habría muchas cosas que probablemente no podría utilizar, y no quería arriesgarme a que no pudiera instalar flexget o transmission. Así que la decisión que tomé fue la de instalar RaspBMC que como su nombre deja entrever, está basada en raspbian, lo cual es bueno.

Fui siguiendo las entradas de mi blog desde casi el principio para hacer la instalación y configuración, pero adaptando un poco los pasos a raspBMC. Una vez la tuve conectada a la red las pruebas fueron esta vez con el primer capítulo de la cuarta temporada de Falling Skies.

Descargar subtítulosComo veis ya que no hay ningún subtítulo disponible en el video nos da la opción de descargar uno. Le doy.

20140627-113606-41766779.jpg

Me dice que no tengo ningún servicio de subtítulos instalados, lo cual es cierto, así que me voy al menú principal y luego a Ajustes > Video donde, en las últimas versiones de XBMC, hay un menú de subtítulos en lugar de tener que ir al submenú de Skin como pasaba en XBian. En ese menú bajamos hasta la opción que dice Servicio de TV por defecto

20140627-113607-41767489.jpg

Al hacerlo, nos dice que podemos instalar uno o varios de los servicios que ofrece. Yo en mi caso he instalado el de subtítulos.es y opensubtitles.org. Si solo vais a coger uno os recomiendo este último.

20140627-113607-41767933.jpg

Una vez seleccionado el servicio de subtítulos que queremos usar, volvemos al menú de subtítulos del video donde al darle al botón descargar nos saldrán todos los subtítulos que ha encontrado disponibles para ese capítulo.

20140627-113608-41768515.jpg

Lo suyo es elegir el nombre del subtítulo que se ajuste exactamente el nombre de nuestro episodio, en este caso con HDTV x264 KILLERS. A la izquierda podéis ver que el subtítulo es en inglés. Lo que pone como sync es que ese subtítulo está sincronizado para nuestro fichero, y lo que pone CC con los close captions o lo que nosotros conocemos como subtítulos para sordos, y que contienen también cosas como [Ruido], [musica] y cosas así.

Una vez seleccionado el subtítulo que queremos veréis que el menú de subtítulos ha cambiado ligeramente para decirnos que ya tenemos un subtítulo.

20140627-113608-41768817.jpg

Y teniéndolo activado el resultado es este.

20140627-113609-41769700.jpg

Justo lo que yo quería. Si curioseáis un poco por las opciones del Add-on de subtítulos podéis ver que podéis descargar los subtítulos en la misma carpeta del fichero como he hecho yo en mi caso, o podéis decirle que los descargue todos a una carpeta en específico. Eso ya es a gusto del consumidor.

Ahora ya solo me queda instalar transmission y flexget y a correr.