Ipods, Bash & Kid3
Tags: spanish, kid3, música, bash
Published: 2024-05-08 02:16:24

Bueno, bueno, bueno, hablemos ahora de cosas serías: 

## _¿Cuándo fué la última vez que te preocupaste por la metadata y el ordenamiento de tu biblioteca musical?_
  

Si tu respuesta es, _"yo puro streaming"_ **este post no es para tí**.
  

De otra forma, bienvenido colega preocupado por la conservación del material digital, te voy a compartir un script en bash que se apoya de varias herramientas (como el cli de Kid3) para ordenar mi biblioteca personal que tengo construyendo desde la preparatoria (alv eso pasó como hace 26 años, kloko)

### Para empezar ...
#### ... por qué debería empezar? 

No sé ustedes pero yo le tengo un amor tremendo a los ipods, me recuerdan mis días de preparatoria y los uso como _"maquinas del tiempo"_: 
llego, tomo uno, me acuesto en el sillón y escucho lo que marcó alguna etapa de mi vida. 

Siempre he reconocido la increíble capacidad del sonido y la memoria para llevarnos a otros espacios y lugares, peeeeero a la vez tengo un toc que me obliga a tener las canciones, que en su mayoría son mp3, con artista, álbum, año, nombre de canción, cover y en el mejor de los casos, letra de la canción.  

![Ipod](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q6j1wiyaw5pd5n0v54vh.jpg)

Evidentemente esto se puede convertir en una tarea un poco pesada considerando que suelo escuchar cosas que van desde la "Banda el Recodo" hasta "The Hu", sin embargo, gracias al open source y un poco de bash dicha tarea puede ser más ligera.

Nota: _Sé que existen algunas formas de hacer este mismo trabajo con herramientas basadas en inteligencia artificial, pero la verdad es que un objetivo alterno era mejorar en mi bash scripting._

[Mlib](https://github.com/everitosan/BashScripts/tree/main/mlib) es el nombre del script que hice y probablemente esté en construcción durante un tiempo mientras voy encontrando areas de oportunidad al ir avanzando en mi proyecto de orden, para poder usarlo necesita algunas otras herramientas como son: 
- kid3-cli
- fzf
- ffprobe
- ffmpeg

```bash
$ mlib -h
░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░ █▀▄▀█ █░░ █ █▄▄          ░
░ █░▀░█ █▄▄ █ █▄█ (v0.0.1) ░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░

  Flags:
    * -d [specifies directory to use]
      -i [shows info of a directory]
      -e [extract image covers]
      -c [convert, can convert to mp3 or wav]
      -f [fill metadata of all files of all tags in a directory]
      -g [generate info.csv file]
      -h [shows help]

  * (required)
```

Entre las cosas que puede hacer por el momento son:
- Mostrar la información de los tags ID3 de todas las canciones en un directorio
- Extraer el cover de cada canción
- Convertir a "formatos" (contenedores) mp3 y wav
- Generar un archivo CSV con Nombre del artista, álbum, año de la canción y el path del cover (que tmbn puede ser una url de internet)
- Complementar la información de las canciones de un directorio en base al csv generado o replicando la información de algún tag que contenga data

Mi operación se basa en tener los archivos en directorios (con el nombre del álbum) e ir validando si puedo trabajar con la información que ya contienen los archivos o debo complementar algo en específico como el Cover, o generar el csv para asegurarme que no existirán variaciones en nombre del álbum o año, solo por mencionar algunos.

```bash
/m/e/T/0/All Time Low ❯❯❯ tree ./      
./
└── mp3
    ├── Nothing Personal
    │   ├── 01 Weightless 1.mp3
    │   ├── 01 Weightless.mp3
    │   ├── 02 Break Your Little Heart.mp3
    │   ├── 03 Damned If I Do Ya (Damned If I Don't).mp3
    │   ├── 04 Lost in Stereo.mp3
    │   ├── 05 Stella.mp3
    │   ├── 06 Sick Little Games.mp3
    │   ├── 07 Hello, Brooklyn.mp3
    │   ├── 08 Walls.mp3
    │   ├── 09 Too Much.mp3
    │   ├── 10 Keep the Change, You Filthy Animal.mp3
    │   ├── 11 A Party Song (The Walk of Shame).mp3
    │   ├── 12 Therapy.mp3
    │   ├── 13 Lost In Stereo (Cobra Starship Suave Suarez Remix) [Bonus Track].mp3
    │   ├── 14 Poison (Bonus Track).mp3
    │   └── Cover.png
    ├── Put Up Or Shut Up
    │   ├── 03 The Girl's A Straight-Up Hustler.mp3
    │   ├── 04 Jasey Rae.mp3
    │   ├── 06 Running From Lions.mp3
    │   ├── 07 Lullabies.mp3
    │   └── Cover.png
    ├── So Wrong, It's Right (Deluxe Edition)
    │   ├── 03 Six Feet Under The Stars.mp3
    │   ├── 05 The Beach.mp3
    │   ├── 08 Remembering Sunday.mp3
    │   ├── 12 Poppin' Champagne.mp3
    │   ├── 14 Dear Maria, Count Me In (Acoustic).mp3
    │   ├── 15 Six Feet Under The Stars (Acoustic).mp3
    │   └── Cover.png
    └── Warped Tour 2012 Compilation
        ├── 2-01 Coffee Shop Soundtrack.mp3
        └── Cover.png

6 directories, 30 files

```

Podría decirse que esta es la primera iteración del proyecto, que claro podría ser más automático en cuanto a la búsqueda de letras o Covers, pero por el momento me ha ahorrado horas de estar llenando y repitiendo información en cientos de canciones.

Sin más, los dejo por ahora ya que tengo una biblioteca que ordenar y complementar. 

Nos escribimos y leemos en la próxima.

## 🔗 Referencias

[Mlib](https://github.com/everitosan/BashScripts/tree/main/mlib)
[Kid3](https://kid3.kde.org/#information)
[ID3](https://en.wikipedia.org/wiki/ID3)
[Contenedores de audio](https://www.youtube.com/watch?v=mfb7tuUTiZ8)