Introducción

Esta semana avancé en mi proyecto de conversor de medios. Había dejado el frontend mostrando datos de los flujos de vídeo y un backend con una solución codificada a mano. Mi objetivo fue conectar ambas partes y conseguir una versión básica que copie un archivo de vídeo a otro archivo, lo renombre y lo coloque en la ubicación elegida por el usuario.

Funcionalidad del proyecto

En la fase 1 la aplicación permite seleccionar un vídeo local y subirlo al sistema. El archivo se fragmenta en chunks que se envían a un segundo servidor con FFMPEG. Ese servidor usa FFPROBE para devolver la información del archivo de vídeo y mostrarla en el cliente. También se genera una lista de streams que el usuario puede modificar o eliminar. Las opciones de actualización incluyen cambiar el contenedor del vídeo como mp4 mov o avi, ajustar los frames por segundo, modificar las dimensiones del vídeo y cambiar canales de audio. El usuario puede renombrar el archivo resultante y elegir una carpeta de destino o usar la carpeta por defecto de la aplicación.

El procesamiento se realiza en un servidor en contenedor Docker para limitar el uso de CPU y RAM que FFMPEG requiere. Una vez enviados todos los chunks, se combinan nuevamente en un archivo y se añaden a una cola para su procesado. Al procesar la cola se genera el comando para FFMPEG y se crea un proceso hijo que copia o reencoda el archivo. Cuando termina, el archivo se devuelve al servidor principal y se reconstruye en la ubicación final. El usuario recibe una notificación mediante websockets indicando donde está el archivo resultante.

Día 1

El primer día eliminé el comando hard coded que usaba mientras probaba con un solo vídeo. Diseñé el objeto de información que recoge las elecciones del usuario y los metadatos necesarios del archivo. Para evitar pasar ese objeto entre muchas funciones, creé un almacenamiento tipo mapa que guarda temporalmente los datos durante la codificación y añadí la librería UUID para identificar cada trabajo de forma única.

Día 2

El segundo día iba a generar comandos pero encontré un fallo en el diseño que hacía que el primer vídeo quedara bloqueado cuando se añadían más elementos a la cola. Había estado esperando que cada función terminara y eso provocaba que cada subida nueva aumentara el tiempo de espera del primer trabajo. Pasé el día refactorizando el flujo del servidor y limpiando código innecesario. Gracias a tener partes ya fragmentadas en funciones la tarea fue de ajustes de flujo más que de reescritura completa.

Día 3

El tercer día me centré en la generación de comandos. Funcionaba bien hasta que probé con un archivo MKV que contiene streams de attachments. Esos attachments son blobs binarios embebidos en la metadata y pueden incluir fuentes, portadas y licencias. Al intentar codificar surgieron errores relacionados con analyze duration y probe size. Tras investigar descubrí que FFMPEG no reencoda esos attachments porque son archivos raw dentro del contenedor. Las soluciones son eliminar esos streams perdiendo esa información o volcar los datos raw, codificar y volver a reinsertarlos. Mientras investigo la mejor estrategia para volcar y reinyectar estos attachments, opté por eliminar los attachments de archivos MKV para evitar fallos.

Día 4 y Día 5

Durante los últimos dos días hice principalmente investigación y más refactorización. La aplicación ya funciona en un flujo básico de passthrough, pero necesitaba mejorar el manejo de errores y la limpieza del código para facilitar la trazabilidad y mantenimiento. También normalicé el sistema de logs para identificar con rapidez qué funciona y dónde falla, aprovechando ideas de sistemas de logging que usé en proyectos anteriores.

Conclusión

El proyecto avanza por buen camino. La versión básica funciona con algunos puntos a pulir relacionados con attachments y manejo de colas. Una vez cerrada esta etapa avanzaré a soportar imágenes con el mismo sistema y a mejorar opciones avanzadas de reencodificado.

Sobre Q2BSTUDIO

En Q2BSTUDIO somos una empresa de desarrollo de software y aplicaciones a medida especializada en soluciones personalizadas. Ofrecemos servicios de software a medida, aplicaciones a medida, inteligencia artificial y ciberseguridad, así como soluciones cloud en AWS y Azure. Si buscas desarrollar una solución específica para tu negocio podemos ayudarte con todo el ciclo de vida del proyecto y con experiencia en desarrollo de aplicaciones y software a medida y en Inteligencia Artificial para empresas.

Servicios y palabras clave

Ofrecemos servicios en inteligencia artificial, ia para empresas, agentes IA, ciberseguridad y pentesting, servicios cloud aws y azure, servicios inteligencia de negocio y power bi para análisis avanzado. Nuestra combinación de experiencia técnica y enfoque en calidad asegura soluciones robustas y escalables que integran automatización, análisis de datos y seguridad en la nube.

Si quieres más información sobre cómo Q2BSTUDIO puede ayudarte con un proyecto de conversión de medios, integración de FFMPEG, automatización de procesos o inteligencia de negocio, contacta con nosotros y trabajemos en una solución a medida que maximice el valor para tu empresa.