Ayuda con un script en Bash!

Estoy desarrollando un script en Bash que:

1.Baje la musica de Youtube con YT-DLP

2.le de metadatos a todas la canciones que baje automaticamente (Nombre, Artista, Album, Año y Portada) con FFmpeg

Entonces la idea mia es usar un formato lossy como lo es OGG Vorbis, a funcionado relativamente bien, excepto con la portada, que por alguna razon no se renderiza apropiadamente en software como VLC, Kid3 y VLC para Android, este es el script:

#! /bin/bash
 
#Leer el Album, Artista, Portada y Año                                          
read -p "ENTER ALBUM:"  Album
read -p "ENTER ARTIST:" Artist
read -p "ENTER COVER:"  Cover
read -p "ENTER YEAR:"   Year
 
#Leer las URL
read -p "ENTER URLs: " URL
#Descargar el Archivo Temporal
for Song in "${URL[@]}"; do
         yt-dlp --extract-audio --audio-format mp3 -o "%(title)s.temp.%(ext)s" $URL
done
 
#Crear a vorbis.head, necesario para la portada
echo -en "\0\0\0\x03\0\0\0\x0aimage/jpeg\0\0\0\x08test.jpg\0\0\0\x08\0\0\0\x0e\0\0\0\x20\0\0\0\0\0\0\x05\xad" > vorbis.head
 echo "HEXDUMP vorbis.head:"
 hexdump -C vorbis.head
 
 #conversion recursiva de todos los .temp.ogg a .ogg con los metadatos
 for filename in *temp.ogg; do
     ffmpeg -i "$filename" \
             -metadata title="${filename%.temp.ogg}" \
             -metadata artist="$Artist" \
             -metadata album="$Album" \
             -metadata year="$Year" \
             -map 0:a -metadata:s:a METADATA_BLOCK_PICTURE="$(cat vorbis.head "$Cover" | base 64 --wrap 0)" "${filename%.temp.ogg}.ogg"
done
 
#Eliminar la Portada (si se quiere) y a los .temp.ogg y a vorbis.head
echo "CONVERSION DONE!"
rm -i $Cover
rm *.temp.ogg
rm vorbis.head

El codigo es algo ineficiente en estos momentos, sobre todo por que he tenido problemas con la portada, esta es inyectada al ogg mediante el metodo de vorbis.head (de aqui saque el metodo: https://superuser.com/questions/1708793/how-to-add-an-art-cover-in-ogg-audio-file), pero este no es infalible! asi que, estoy pidiendo ayuda para mejorar la “inyeccion” de la portada en el ogg, ademas de pequeñas mejoras necesarias como el manejo de excepciones y extraer de Youtube el orden de las canciones.

Este es mi primer script de bash serio, asi que si no he hecho algo como se deberia porfavor diganmelo para corregirlo.

Gracias.

3 Me gusta

Si quieres te ayudo a eliminar todo los metadatos (solo empleo nombre). Fuera de bromas, puedes emplear mpv para ver los logs y porque no carga la imagen.

Si no funciona puedes emplear otra función para extraer los metadatos y comprobar si se extrae la imagen y es igual a la original. Por lo menos separarías las exitosas de las erróneas.

Ademas no emplees mp3. No tiene sentido descargar la música en baja calidad si tienes mejores opciones como -f bestaudio y despues lo conviertes en vorbis.

Con la el argumento “–embed-thumbail” puedes añadir portada sin tener que usar vorbis.head:

yt-dlp -x --audio-format flac --embed-thumbnail "URL_DE_LA_PLAYLIST_O_VIDEO"
4 Me gusta

podria funcionar, el problema, es que los videos musicales no siempre tienen portada, y si la tienen la tienen como video, son raros aquellos que no, pero si, es una buena idea

Youtube music resuelve mucho ese problema