La verdad es que durante estos años, la página web, y posteriormente el podcast y el canal de YouTube me han ayudado muchísimo en todos los aspectos de mi vida. Hoy te puedo decir, que es una de las mejores inversiones que he podido hacer, y que puedo hacer es precisamente atareao.es. Y justo aquí quiero citar a Roberto De Vicenzo que dijo aquello de Tengo suerte, pero cuanto mas entreno más suerte tengo…. Voy al lío que me disperso… Una de las grandes aportaciones de atareao.es es todo lo que me incita a investigar. Cierto es que me gusta automatizar todo para tener que invertir menos tiempo en hacer tareas repetitivas, pero esta automatización viene de la mano de la investigación que voy haciendo. Si me sigues desde hace tiempo, no te estoy descubriendo nada nuevo. Siempre estoy hablando de nuevas herramientas, distintas tecnologías, cambios de paradigma, y este es precisamente uno de esos episodios en los que te vengo a hablar sobre cuatro herramientas y como las utilizo para mejorar mi producción multimedia. Aunque hable de producción multimedia, así de forma rimbombante, lo cierto es que me refiero a los audios y las imágenes que acompañan a los distintos episodios. Así que vamos al turrón.
4 herramientas de IA para Spotify y YouTube
La llegada de la IA
Como no podía ser de otra forma, lo cierto es que atareao.es se ha visto fuertemente sacudido por los modelos de lenguaje. Creo que como todo el mundo, inicialmente lo veía con cierto escepticismo, pero hoy, ya me he dado cuenta del increíble potencial que tiene, y cada vez lo voy incorporando a mas procesos. Y para que te de des cuenta de ello, de las cuatro herramientas de las que te quiero hablar en este episodio, dos son relativas al mundo de la inteligencia artificial y las otras dos son viejos conocidos.
Transcribir de audio a texto con whisper
La primera de las herramientas de la que te quiero hablar es whisper. Se trata de un modelo de inteligencia artificial desarrollado por OpenAI, que es capaz de transcribir audio a texto con una precisión impresionante. Lo utilizo para transcribir los audios de los episodios, lo que me permite tener un texto que puedo utilizar para crear los resúmenes, las descripciones, y también para mejorar el SEO de la página web.
Mi proceso de elaboración de un episodio no es como te habrías podido imaginar. Creo que es contra intuitivo, pero, desde luego es como a mi me gusta hacer, y como creo que le doy mi impronta a cada episodio.
El primer paso es redactar el artículo que acompaña a cada episodio. Una vez hecho por completo el artículo que posteriormente puedes encontrar tal cual en atareao.es, grabo el episodio en vídeo. Y aquí es donde interviene whisper, que es el que se encarga de transcribir el audio del vídeo a texto.
Para esta operación utilizo el un script en fish, que p:uedes encontrar en mis dotfiles, pero que donde la parte importante se encuentra en esta líneas,
if whisper --device cuda \
--language Spanish \
--model medium \
--output_format srt \
--task transcribe \
--output_dir . \
"$input"
Llegados a este punto, utilizo Google AI Studio, para hacer las siguientes tareas, después de haberme peleado con varios prompst para conseguir un resultado que a mi me parece a día de hoy mas que aceptable,
- Obtener el minutaje del episodio. Basicamente extraer los capítulos del episodio, con su inicio correspondiente que posteriormente utilizaré en la descripción tanto de YouTube como en la de Spotify.
- Propuesta de títulos para YouTube y en ocasiones para Spotify. A estas alturas, tengo que reconocer que no se poner títulos a los vídeos de YouTube, me parece una misión imposible, en el sentido de conseguir títulos que impacten. No lo se hacer, y como no lo se hacer lo he delegado por completo a los modelos de lenguaje. Al menos de momento. Luego veremos.
- Igual que me sucede con los títulos, de forma similar me pasa con la descripción de los vídeos. Así, que esta es otra tarea, que tengo delegada.
- Y por último el SEO, los 150 caracteres que aparecen. Esto me parece una verdadero puzzle. Conseguir resumir en solo 150 caracteres todo lo que he expresado en 2000 palabras me parece una auténtica locura, y esto me ha llevado a delegarlo también en los modelos de lenguaje.
Mejorar la calidad de las imágenes con realesrgan-ncnn-vulkan
Se me olvidó comentarte en el punto anterior, que una de las tareas que también tengo delegado a los modelos de lenguaje es la generación del prompt para posteriormente generar la imagen. Y es que en lugar de andar buscando imágenes, y lo que hace ya algún tiempo que vengo haciendo es generarla mediante algún que otro modelo de lenguaje.
Hasta hace poco estaba utilizando recraft.ai, pero con lo cierto es que con la llegada de Nano Banana la cosa ha cambiado y finalmente esto también lo termina haciendo Google.
Sin embargo, a pesar de insistir una y otra vez, lo cierto es que no he conseguido que me lo haga de las dimensiones que quiero. Por ejemplo en el caso de las imágenes 1×1, siempre me las hace de 1000×1000 pixel, cuando yo las quiero de 2000×2000 pixel. Y esto me ha llevado a utilizar realesrgan-ncnn-vulkan para mejorar la calidad de las imágenes generadas por los modelos de lenguaje.
Con esta herramienta he conseguido resultado mas que aceptables, y lo cierto es que me ha sorprendido gratamente. Es una herramienta que utiliza redes neuronales para mejorar la calidad de las imágenes, y lo cierto es que los resultados son impresionantes.
En este caso, también utilizo una script en fish para hacer toda la operación, porque hace un par de imágenes una en formato Full HD y otra en formato de 1×1. Dependiendo del tamaño hace el escalado utilizando el siguiente comando,
realesrgan-ncnn-vulkan -i "$tmp_jpg" -o "$tmp_esrgan" -s 2
Cambios en las imágenes con magick
En el mismo script que te indiqué anteriormente utilizo magick. Si no lo conoces, indicarte que magick es una herramienta de línea de comandos que forma parte de la suite de herramientas de procesamiento de imágenes ImageMagick. Con esta herramienta puedo hacer todo tipo de operaciones con las imágenes, como por ejemplo recortar, redimensionar, cambiar el formato, etc.
Realmente es una herramienta espectacular, que vengo utilizando desde hace años, pero en este caso, he querido traer algunas de las operaciones que estoy haciendo, para que tengas en cuenta las posibilidades que ofrece, y puedes hacer mucho mas de lo que estás haciendo hasta la fecha.
Las imágenes que genera Nano Banana, o por lo menos tal y como yo las obtengo son en formato PNG. El primer paso es convertirlas a JPG, porque de esa forma el proceso de escalado en el caso de que sea necesario no da ningún error. Convertirlas de un formato a otro es inmediato nuevamente con magick, simplemente tengo que ejecutar este comando,
magick "$input_file" "$tmp_jpg"
Actualmente estoy obteniendo dos imágenes, una en formato cuadrado y otra en Full HD o parecido, a lo mejor es mas pequeña pero en esas proporciones. Con magick identifico cual es cual, y dependiendo de las dimensiones lo ajusto a las dimensiones correctas. Para esto utilizo el siguiente comando dentro del script indicado anteriormente,
magick "$tmp_esrgan" -resize "$target_w"x"$target_h!"
Y por último utilizo una plantilla en formato SVG que completo utilizando una herramienta de la que hablé en otro episodio que se llama jinrender.
Mejorar la calidad de los audios con ffmpeg
Para normalizar el audio que utilizo tanto en el vídeo como en el podcast estoy utilizando ffmpeg. Empezamos con el audio del podcast, indicándote que el comando que utilizo es el siguiente,
ffmpeg -i "{{origen}}" \
-vn \
-af "pan=mono|c0=c0+c1, \
highpass=f=80, \
lowpass=f=15000, \
afftdn, \
arnndn=model=/home/lorenzo/.config/arnndn-models/std.rnnn, \
compand=0.3|0.3:6:-90/-60|-60/-40|-40/-20|-20/-1, \
loudnorm=I=-14:TP=-1.0:LRA=11" \
-c:a libmp3lame \
-q:a 4 \
"/data/podcasts/audio/e{{episode}}.mp3"
-i "{{origen}}": Define el archivo de entrada (input).-vn: «Video None». Indica a FFmpeg que ignore el video si el origen es un archivo multimedia, centrándose solo en el audio.-c:a libmp3lame: Selecciona el códec de audio. En este caso, utiliza la librería LAME para generar un archivo MP3.-q:a 4: Establece la calidad mediante Bitrate Variable (VBR). El valor4suele dar una media de 160 kbps, ideal para que un podcast suene bien sin que el archivo pese demasiado."/data/podcasts/audio/e{{episode}}.mp3": Es la ruta y nombre del archivo de salida.
Respecto a la cadena de filtros de Audio (-af), indicar que se aplican de forma secuencial, como si fuera una cadena de pedales de efectos:
pan=mono|c0=c0+c1: Convierte el audio a mono. Suma el canal izquierdo (c0) y el derecho (c1) en uno solo. Es fundamental en podcasts para que la voz se escuche centrada.highpass=f=80: Filtro de paso alto. Elimina todas las frecuencias por debajo de 80 Hz. Sirve para quitar ruidos sordos, como golpes en la mesa o el zumbido de un motor.lowpass=f=15000: Filtro de paso bajo. Elimina frecuencias por encima de 15,000 Hz. Quita el «siseo» agudo innecesario para la voz humana.afftdn: Reducción de ruido basada en Transformada Rápida de Fourier (FFT). Analiza el espectro para eliminar el ruido de fondo constante (como el soplido de un ventilador).arnndn=model=...: Reducción de ruido mediante Redes Neuronales (RNN). Es mucho más avanzado: utiliza inteligencia artificial para distinguir qué es voz humana y qué es ruido, eliminando este último de forma muy limpia.compand=...: Es un compresor/expansor. Básicamente «aplana» el volumen: hace que las partes donde hablas más bajo suban y los picos demasiado fuertes bajen, manteniendo una escucha constante.loudnorm=I=-14:TP=-1.0:LRA=11: Normalización de sonoridad bajo el estándar EBU R128.I=-14: Ajusta el volumen a -14 LUFS (el estándar de Spotify/Apple Podcasts).TP=-1.0: Asegura que los picos nunca sobrepasen los -1.0 dB para evitar distorsión.
Y para el caso del vídeo, utilizo el siguiente comando,
ffmpeg -i "{{origen}}" \
-c:v copy \
-af "pan=mono|c0=c0+c1, \
highpass=f=80, \
lowpass=f=15000, \
afftdn, \
arnndn=model=/home/lorenzo/.config/arnndn-models/std.rnnn, \
loudnorm=I=-14:TP=-2.0:LRA=11" \
-c:a aac \
-b:a 192k \
"completos/podcasts/e{{episode}}.mkv"
Y las diferencias son las siguientes,
-c:v copy(El cambio más importante). Aquí, se mantiene el video. La opcióncopyle dice a FFmpeg que copie el flujo de video tal cual está, sin volver a procesarlo (re-encodear). Es instantáneo y no pierde calidad.- Eliminación del filtro
compand. Se ha quitado el compresor/expansor de la cadena de audio. Esto significa que la dinámica de la voz será un poco más natural antes de llegar al paso final de normalización. - Cambio en
loudnorm(TP=-2.0). Antes el pico máximo (True Peak) era-1.0, ahora es-2.0. Esto deja un poco más de «margen de maniobra» (headroom) para evitar cualquier posible distorsión en diferentes reproductores. -c:a aac(Nuevo Códec). En lugar de MP3, ahora se usa AAC. Es un formato más moderno y eficiente que el MP3, ofreciendo mejor calidad de sonido a bitrates similares.-b:a 192k(Bitrate Constante). En el primero usaba calidad variable (-q:a 4). Aquí se fija un bitrate constante de 192 kbps, que es una calidad alta y estándar para video.- Contenedor
.mkv. Al incluir video, se cambia la extensión de.mp3a Matroska (.mkv), que es un contenedor muy flexible capaz de guardar el video original y el nuevo audio AAC.