es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Script de Bash para renombrar masivamente archivos mp3.

Tengo una biblioteca de música con archivos mp3 (con metadatos correctos) organizados de la siguiente manera: Música/{artistas}/{álbum}/{título}

Por ejemplo: Música/Green Day/American Idiot/<canciones en el álbum>

Cada archivo mp3 se llama de la siguiente manera: {título} {artistas} {álbum}.mp3

Por ejemplo: Jesus of Suburbia Green Day American Idiot.mp3

Manteniendo la misma estructura de directorios, me gustaría renombrar cada archivo de la siguiente manera: {título} - {artistas} - {álbum}.mp3

Por ejemplo, Jesus of Suburbia Green Day American Idiot.mp3 –> Jesus of Suburbia - Green Day - American Idiot.mp3

Espero que alguien conozca un script que pueda hacer esto.

Gracias por la ayuda.

P.D.

Las canciones que tienen varios artistas están organizadas de manera diferente.

Por ejemplo, en la biblioteca de música tenemos tanto

Música/Fall Out Boy/Save Rock And Roll/<la mayoría de las canciones del álbum>

como

Música/Fall Out Boy,Elton John/Save Rock And Roll/Save Rock And Roll Fall Out Boy,Elton John Save Rock And Roll.mp3

Este no es el mejor ejemplo, ya que puede ser confuso porque esa canción comparte el mismo nombre que el álbum, por lo que aparece dos veces en el nombre del archivo mp3.

EDIT:
Basado en tus sugerencias de búsqueda, pude encontrar un comando:

ffprobe -loglevel error -show_entries format_tags=title,artist,album -of default=noprint_wrappers=1:nokey=1 archivo.mp3

Que puede extraer los atributos de metadatos que necesito. No estoy seguro de cómo aplicar esto para poder renombrar los archivos.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    ¡Claro! Puedes utilizar el siguiente script de bash para lograr esto:

    #!/bin/bash
    
    # Ir al directorio de música
    cd Música
    
    # Para cada directorio de artista
    for artist_dir in */; do
    
      # Para cada directorio de álbum dentro del directorio de artista
      for album_dir in "$artist_dir"*/; do
    
        # Para cada archivo MP3 dentro del directorio de álbum
        for file in "$album_dir"*.mp3; do
    
          # Extraer los atributos de metadatos
          title=$(ffprobe -loglevel error -show_entries format_tags=title -of default=noprint_wrappers=1:nokey=1 "$file")
          artist=$(ffprobe -loglevel error -show_entries format_tags=artist -of default=noprint_wrappers=1:nokey=1 "$file")
          album=$(ffprobe -loglevel error -show_entries format_tags=album -of default=noprint_wrappers=1:nokey=1 "$file")
    
          # Renombrar el archivo MP3
          mv "$file" "$album_dir$title - $artist - $album.mp3"
    
        done
    
      done
    
    done
    

    Este script iterará sobre cada directorio de artista, luego sobre cada directorio de álbum dentro de cada directorio de artista y, finalmente, sobre cada archivo MP3 dentro de cada directorio de álbum. Para cada archivo MP3, utilizará ffprobe para extraer los atributos de metadatos title, artist y album, y luego renombrará el archivo en consecuencia. El nuevo nombre de archivo tendrá el formato {title} - {artist} - {album}.mp3, tal como lo has solicitado.

    Asegúrate de guardar este script como un archivo (por ejemplo, renombrar_musica.sh), hacerlo ejecutable (chmod +x renombrar_musica.sh) y ejecutarlo desde el directorio que contiene el directorio Música. También puedes modificar el script para manejar múltiples artistas si lo deseas.

Comments are closed.