main content

Cómo crear un sistema de gestión de bibliotecas multimedia con transcripción automática y búsqueda por metadatos en Drupal

Tu equipo de marketing necesita ese vídeo del evento de 2024 donde el CEO hablaba de internacionalización. Lleva 40 minutos buscándolo entre tres Drives compartidos, dos discos externos y un Dropbox que nadie recuerda quién pagó. ¿Te suena?

Ese caos tiene solución, y la tienes más cerca de lo que crees si ya trabajas con Drupal. El núcleo trae todo lo necesario para montar una biblioteca multimedia central, indexable por contenido hablado y buscable por metadatos finos. En esta guía te cuento cómo lo planteamos cuando un cliente nos pide exactamente esto.

Lo que ganas (y lo que pierdes si no lo haces)

Una biblioteca multimedia bien montada no es un capricho de arquitecto de información. Es tiempo recuperado.

Cuando el equipo de marketing localiza un activo en segundos en vez de en una mañana, recuperas horas facturables cada semana. Cuando el mismo vídeo institucional se reutiliza en tres campañas porque está bien catalogado, multiplicas el retorno de la producción original. Y cuando puedes asociar licencias y caducidades a cada archivo, dejas de tener miedo a una reclamación por usar una foto de stock vencida.

Hay un beneficio menos obvio: la accesibilidad. Las transcripciones automáticas no solo cumplen con normativa europea, también convierten cada minuto de vídeo en texto que Google puede leer. SEO orgánico gratis sobre contenido que ya tenías.

Y luego está la búsqueda por contenido hablado. Imagina escribir "estrategia LATAM" en un buscador interno y saltar directamente al minuto 47 del webinar donde se menciona. Eso ya no es ciencia ficción.

Drupal Media: el cimiento que ya tienes instalado

Desde Drupal 8 el módulo Media vive en el núcleo. Esto importa porque tus activos multimedia son entidades de primera clase, no archivos sueltos colgando de nodos. Significa que puedes añadirles campos, vistas, permisos y workflows como a cualquier otro tipo de contenido.

De serie tienes cinco tipos: Image, Video, Audio, Document y Remote video. Probablemente te queden cortos en cuanto bajes al detalle.

En un proyecto reciente creamos un tipo "Podcast" derivado de Audio con campos para temporada, episodio, invitados y enlace al guion. Otro cliente necesitaba un tipo "Grabación de evento" con sala, ponente principal y duración real (no la del archivo, que incluía el silencio inicial). La regla práctica: si un campo solo aplica a una parte de tu catálogo, crea un tipo nuevo en vez de inflar los existentes con campos vacíos.

Taxonomías que reflejen cómo busca la gente, no cómo archiva

Aquí es donde la mayoría falla. Diseñan vocabularios pensando en cómo guardar, no en cómo buscar.

Pregunta a tres personas de departamentos distintos cómo describirían el mismo vídeo. Si una dice "evento", otra "presentación cliente" y la tercera "Q3 kick-off", necesitas vocabularios separados que cubran las tres lógicas. Yo suelo empezar con cinco:

  • Categoría temática (formación, marketing, producto, evento).
  • Tipo visual (captura, foto de producto, infografía, grabación).
  • Departamento propietario.
  • Proyecto o campaña.
  • Etiquetas libres, para todo lo que no encaja.

El último vocabulario, el de etiquetas libres, es vital. Sin él, la gente acaba metiendo conceptos forzados en las taxonomías cerradas y las contamina.

Transcripción automática: el cambio de juego

Esta es la pieza que convierte una biblioteca decente en una herramienta indispensable. Convertir audio y vídeo en texto indexable significa que tu motor de búsqueda deja de ser ciego ante el 80% del contenido multimedia.

Qué servicio elegir

Tres opciones razonables hoy, y elegir bien depende más de tu contexto que de la precisión bruta.

Google Cloud Speech-to-Text soporta 125 idiomas, tiene modelos especializados (llamada telefónica, dictado, vídeo) y permite vocabulario personalizado para que reconozca tus términos técnicos. Pagas por minuto procesado. Buena opción si tu volumen es medio y no quieres mantener infraestructura.

AWS Transcribe brilla cuando necesitas identificar quién habla. En entrevistas, mesas redondas o reuniones, separa intervenciones por hablante automáticamente. Si ya vives en AWS, la integración te ahorra dolores de cabeza.

OpenAI Whisper es el caballo oscuro. Open source, ejecutable en tu propia infraestructura, sin coste por uso una vez desplegado. Precisión excelente en español. Pero necesitas GPU para que sea viable a escala. Para volúmenes grandes, sale rentable; para 10 archivos al mes, es matar moscas a cañonazos.

Cómo lo conectas a Drupal sin romperlo

La regla de oro: nunca, nunca transcribas durante la subida del archivo. El editor se queda esperando tres minutos mirando una rueda girar y maldice el sistema.

El patrón que funciona es asíncrono:

  1. El editor sube el archivo desde la interfaz de Media. Todo normal, respuesta inmediata.
  2. Un hook (hook_entity_insert sobre Media) detecta el nuevo activo y encola una tarea.
  3. Un worker procesa la cola en segundo plano, manda el archivo al servicio elegido y espera la respuesta.
  4. La transcripción vuelve y se guarda en un campo de texto largo dentro de la entidad.
  5. Search API reindexa y el contenido se vuelve buscable.

Para implementarlo, la Queue API del núcleo de Drupal cubre el 90% de los casos. Para volúmenes serios, sustituye el worker por algo como RabbitMQ o Redis y procesa en una máquina dedicada. Si tiras de Whisper en local, un comando Drush ejecutado por cron suele bastar.

Guarda dos versiones del resultado: la transcripción plana en un campo de texto formateado (para búsqueda full-text) y una versión JSON con marcas de tiempo (para saltar directamente al segundo exacto desde los resultados de búsqueda). Esa segunda capa es la que tu equipo va a flipar en cuanto la pruebe.

Metadatos que no se quedan en el título

Las taxonomías clasifican, los metadatos describen. Necesitas las dos cosas.

Empieza por Dublin Core como esquema base: título, creador, tema, descripción, fecha, formato, derechos, idioma. Es un estándar maduro, interoperable, y te ahorra reinventar la rueda. Mapea cada elemento a un campo de Drupal y márcalos como obligatorios solo si vas a hacerlos cumplir.

Después añade lo específico de tu caso. Duración (extraída con FFmpeg automáticamente al subir), resolución, coordenadas GPS si vienen en el EXIF, participantes referenciados a usuarios reales, fecha de caducidad para licencias temporales, estado de aprobación. Cada campo tiene que ganarse su sitio: si nadie va a filtrar por él ni va a aparecer en pantalla, no lo añadas. Los formularios kilométricos matan la adopción.

Búsqueda de verdad: Search API más Solr o Elasticsearch

La búsqueda nativa de Drupal vale para un blog. Para una biblioteca multimedia con miles de activos, necesitas artillería pesada.

Search API es el módulo que abstrae el motor. Por debajo le enchufas Apache Solr o Elasticsearch. Ambos van bien; Solr suele ser más fácil de configurar para equipos sin experiencia previa, Elasticsearch escala mejor cuando creces.

El índice debe incluir todo lo que sirva para encontrar contenido: título, descripción, transcripción completa, taxonomías, metadatos personalizados. Configura los procesadores adecuados (tokenizer, stemmer para que "grabación" y "grabaciones" devuelvan lo mismo, stopwords en español, limpieza de HTML) y prueba con búsquedas reales antes de dar el sistema por bueno.

Facetas: el filtro que tus usuarios usarán cada día

Instala el módulo Facets y configura filtros por tipo de media, categoría, rango de fechas, departamento, duración (menos de 5 min, 5-30, más de 30) e idioma. Las facetas son lo que diferencia una búsqueda usable de un Google interno tosco.

Construye la interfaz principal con Views sobre el índice de Search API. Campo de búsqueda full-text que ataque título, descripción, transcripción y metadatos a la vez. Filtros expuestos para las facetas. Resultados con miniaturas para imágenes, fotogramas para vídeos y reproductor embebido para audio. Ordenación por relevancia, fecha o popularidad. Esa vista será la home de tu biblioteca.

Permisos: no todo el mundo puede ver todo

Drupal te da permisos por rol de serie, pero para una biblioteca seria necesitas más granularidad. Taxonomy Access Control restringe por categoría asignada. Field Permissions oculta campos concretos a roles concretos. Si tienes departamentos estancos, el módulo Group crea espacios aislados con sus propias bibliotecas y permisos.

Detalle que se suele olvidar: separa el permiso de visualización del de descarga. Que alguien pueda ver una miniatura no significa que deba poder bajarse el original en alta resolución.

Rendimiento cuando la biblioteca crece

Diez mil activos no es ciencia ficción. Es el segundo año de uso normal en una empresa mediana.

Pon un CDN delante (Cloudflare, CloudFront o Fastly) para servir los archivos. Tu servidor te lo agradecerá y los tiempos de carga internacionales caerán a la mitad.

Define estilos de imagen por contexto: miniatura 150x150, listado 400x300, detalle 1200x800. Activa el módulo WebP para servir versiones modernas que pesan la mitad sin pérdida visible.

Lazy loading nativo con loading="lazy", scroll infinito con AJAX en las vistas, y absolutamente todo el procesamiento pesado (miniaturas, EXIF, transcripción) en colas con la Queue API. Ultimate Cron te permite separar colas por prioridad para que una transcripción larga no bloquee la generación de miniaturas que el editor está esperando ver ya.

El siguiente paso

Montar esto no es trivial. Tampoco es ciencia oculta. Es un proyecto de 6 a 10 semanas para una organización mediana, con retorno medible desde el primer mes en horas que tu equipo deja de tirar a la basura buscando archivos.

Lo importante: planifica la taxonomía antes de tocar código. Casi todos los problemas que vemos en bibliotecas multimedia mal montadas vienen de un esquema de clasificación improvisado, no de fallos técnicos.

Si te interesa montar una biblioteca a la medida de tu volumen y de cómo trabaja tu equipo, cuéntanos tu caso y diseñamos la arquitectura contigo.