# Tecnologías multimedia e interacción/Curso 2016-2017: Caso 2
## TMIVideoBot

Nuestro proyecto de TMI ha consistido en la realización de un bot de Telegram para edición sencilla de vídeos, permitiendo realizar una serie de funciones fácilmente ampliables.

### Motivación e idea

La idea de realizar un proyecto de tratamiento de vídeo surge porque todos los integrantes del grupo hemos hecho trabajos individuales sobre vídeo, por lo que nos sentíamos cómodos realizando un proyecto sobre este tema.
Por otra parte, somos conscientes de que cada vez se llevan más archivos importantes en el móvil, y de que es necesaria la instalación de muchas aplicaciones diferentes para trabajar con cada uno de ellos. Además, existen aplicaciones de vídeo muy completas para escritorio pero, ¿y si es muy sencillo lo que queremos hacer y queremos hacerlo desde el móvil?
Por todo ello, decidimos crear este bot, consiguiendo tener una herramienta accesible y sencilla para pequeñas ediciones de vídeo.
La idea de implementarlo como un bot de Telegram nace de la familiarización de los integrantes del grupo con esta herramienta, además de así conseguir evitar tener que instalar una aplicación más en el móvil, ya de por sí lleno de ellas, llenando la memoria del dispositivo en numerosas ocasiones.
Inicialmente el proyecto se pensó como un bot de Telegram únicamente para conversión de formatos de vídeo, motivado por la necesidad en ocasiones de convertir vídeos a diferentes formatos para poder enviarlos por aplicaciones de mensajería como Telegram y Whatsapp con garantía de compatibilidad para su reproducción.
Como el proyecto avanzaba con rapidez, se decidió ampliar la funcionalidad del mismo, completándose progresivamente según se iban consiguiendo los objetivos pequeños que nos proponíamos.

### Funcionalidad

La funcionalidad de la versión actual del presente bot incluye los siguientes comandos:
* /help: Listado de todo lo que se puede hacer con el bot.
* /convert: Convertir un vídeo a otro formato.
* /compress: Comprimir un vídeo especificando calidad de salida.
* /youtube : Obtener un vídeo de youtube.
* /youtubetomp3 : Obtener el audio de un vídeo.
* /gif: Crear un GIF de un vídeo indicando segundos de inicio y fin.
* /onlyaudio: Extraer audio de un vídeo.
* /onlyvideo: Extraer imagen de un vídeo.
* /clip: Cortar vídeo de segundo inicio a segundo fin.
* /videoaudio: Unir vídeo con determinado audio en MKV.

### Requisitos de instalación

Para poder desplegar el bot correctamente, lo primero que se debe hacer es crear nuestro bot. Para ello es útil emplear Bot father, que nos permitirá configurarlo en unos pocos pasos, decidiendo el alias de nuestro bot, su foto de perfil y otras opciones. Este bot "creador de bots", nos devolverá un Token de autenticación que deberemos copiar en nuestro codigo en la variable token.
Para poner en ejecución el bot, una vez instalado como se detalla más adelante, basta con ejecutarlo de la siguiente forma:
Por otro lado, se cuenta con las siguientes dependencias y requisitos:
* Ha sido implementado con la versión de Python 2.7.12.
* Implementación en Python de la API para Bots de Telegram. Normalmente se puede instalar mediante pip:
Para más detalles, se puede consultar el repositorio de github.
* Ffmpeg, empleado para gran parte de la funcionalidad del bot. Se usa también ffprobe. También disponible mediante:
NOTA: Es necesario instalarlo con algunos flags activados para poder trabajar con formatos como OGG o WebM, incluyendo libvpx, libvorbis y theora. En Mac, puede reinstalarse ffmpeg con el siguiente comando:
* Youtube-dl, escrito en Python y empleado para las dos funcionalidades de descarga de vídeo y audio de la plataforma Youtube. Se puede instalar también mediante pip:

### Desarrollo

El desarrollo del proyecto se llevó a cabo íntegramente en las clases de laboratorio de los viernes de 19 a 21, dedicándose algo de tiempo en casa a corrección de errores o a realizar pruebas de funcionamiento.
Se han usado una serie de herramientas, entre las que destacamos:
* The Bot Father: bot de Telegram que permite crear bots de usuario de forma sencilla, proporcionándonos un token, un identificador de nuestro bot que nos permitía controlar la configuración del mismo.
* Python y Telegram Python API: hemos escogido Python como lenguaje de desarrollo principalmente por su sencillez, por lo que hemos hecho uso de la API de Telegram para este lenguaje.
* FFMPEG: software libre que puede grabar, convertir y hacer streaming de audio y vídeo. Es un programa bastante sencillo y muy fácil de usar, orientado tanto a personas con conocimientos avanzados como usuarios novatos. Lo usan programas como VLC, Google chrome o Blender.
* Youtube-DL: programa desde línea de comandos, aunque hay versiones con interfaz gráfica, desarrollada para mi sorpresa por un señor español, proyecto aún en activo y que nos permite descargar vídeo o audio de plataformas como Youtube, entre otras.
* Sublime Text: herramienta de edición de código empleada.
* Github: donde se ha alojado el proyecto y se lleva el control de versiones.

### Problemas encontrados

En primer lugar, nos encontramos con que la librerías que estábamos utilizando estaban protegidas bajo licencias privativas. Tras tener un primera versión inicial del proyecto tuvimos que rehacerlo con librerías open source como FFmpeg que nos ayudó en la conversión y edición de los vídeos.
Además tuvimos problemas con la conversión de formatos como OGG y Webm. Con la ayuda de Stack Overflow logramos descubrir que estos formatos requieren la activación de codecs durante la instalación de la librería FFmpeg, aunque el tiempo de conversión sea más lento.
Uno de los inconvenientes que no llegamos a solucionar fueron las limitaciones de tamaño de archivos por parte de la API para bots de Telegram. Por defecto, Telegram permite un máximo de 50MB de tamaño de vídeo y esta restricción parece que no vaya a cambiar por el momento.
Por último, nos encontramos con la dificultad de procesar algunos caracteres especiales al descargar vídeos de youtube con Youtube-DL. Aún sin solución por el momento y pendiente de arreglar.

### Conclusiones

Hoy en día cada vez más los bots están adquiriendo una mayor presencia e incluso un mayor impacto, facilitando al usuario muchas tareas. A nosotros realizar este proyecto nos ha permitido aprender muchas cosas sobre la edición de vídeo, además de las tecnologías que hemos utilizado. Creemos haber realizado una herramienta útil a nivel personal, la cual puede suponer un ahorro de tiempo para realizar tareas de edición sencillas. Por otro lado, como trabajo futuro se puede ampliar la funcionalidad de forma sencilla sin tener que realizar grandes cambios. Por último, es un proyecto fácil de desplegar que esta al alcance de cualquier persona, siguiendo el guión aquí presente.