¿Agregar portada del álbum al archivo mp3 / ogg desde la línea de comandos en modo por lotes?

38

Estoy buscando un software en Linux, que agregará la carátula del álbum / portada a cada uno de los archivos seleccionados en modo por lotes. La carátula del álbum es un jpg / png almacenado en mi computadora. Será increíble si puede importar desde internet.

Actualmente he probado tanto Rhythmbox como Banshee. También lo he intentado lamey easytag, pero parece que no admiten el modo por lotes. nolame está agregando las propiedades, sino sobrescribiendo. (Sé que cojo es la única línea de comando que he usado hasta ahora).

Entonces, básicamente estoy buscando:

<some magic s/w> --picture=<my chosen picture> Music/Artist/*.mp3

Eso agregará la imagen a los metadatos del archivo, de forma permanente.

¿Me puede sugerir algún software de este tipo?

BaRud
fuente

Respuestas:

24

cojo

Utilizando lamepuedes hacer esto usando un pequeño script:

$ lame --ti /path/to/file.jpg audio.mp3

Si los archivos se llaman así, puede hacer un script de shell para hacer lo que quiera:

for i in file1.mp3 file2.mp3 file3.mp3; do
  albart=$(echo $i | sed 's/.mp3/.jpg/')
  lame --ti /path/to/$albart $i
done

Usted puede hacer lo anterior un poco más compacto y eliminar la necesidad de sedmediante el uso bashde hacerlo por tener que quitar el sufijo coincidente:

...
albart="${i%.mp3}.jpg"
...

Picard / MusicBrainz

Si desea hacer esto a gran escala, le sugiero que use Picard, que es la herramienta de interfaz para usar la base de datos MusicBrainz. Hay un complemento para Picard llamado "Cover Art Downloader", que puede hacer esto en lotes de su colección.

Sin embargo, lo anterior no parece estar impulsado por la línea de comandos.

remolacha

Otra opción sería usar beets. Esto se puede manejar desde la línea de comandos y hace uso de la base de datos MusicBrainz para obtener la carátula del álbum.

Puede obtener la carátula del álbum con el complemento FetchArt o incrustarlo con el complemento EmbedArt .

¿Otras opciones?

También eche un vistazo a esta pregunta y respuesta de U&L previamente titulada: ¿Qué herramienta de etiquetado de mp3 para Linux? . Hay varias herramientas alternativas enumeradas en este hilo.

slm
fuente
Puede evitar la sedllamada con algo como albart="${i%.mp3}.jpg". Más importante aún, acabo de probar su comando cojo y obtuve lame: unrecognized option -i...
evilsoup
@evilsoup: gracias, al interruptor le faltaba un guión. Debe ser --ti ...
slm
@evilsoup: también agregó sus comentarios sobre no usar sed. ¡Gracias!
slm
8
@ Exeleration-G: no, no recomendaría usarlo lameya que en realidad es un codificador. Hay otras herramientas para manipular las etiquetas id3 de un mp3. Puede usar id3v2 -r "APIC" *.mp3o eyeD3 --remove-all-images *.mp3eliminar cualquier imagen adjunta.
slm
2
FYI mi versión 3.99 no tiene una opción "--ti" (debian buster) - eyeD3 parece ser una buena alternativa.
Benjamin Peter
17

Una solución sería usar ffmpeg:

ffmpeg -i input.mp3 -i cover.jpg -map_metadata 0 -map 0 -map 1 output.mp3

Puede poner esto en un bucle for para hacer cada MP3 en un directorio:

for f in ./*.mp3; do ffmpeg -i "$f" -i cover.jpg -map_metadata 0 -map 0 -map 1 out-"${f#./}"; done

Esto creará un archivo de salida separado (por lo tanto, si tiene un archivo llamado foo.mp3, terminará con ambos foo.mp3y out-foo.mp3); Esto se debe a que ffmpeg no puede escribir sobre su entrada. Puedes arreglar esto con algo como:

for f in ./*.mp3; do \
ffmpeg -i "$f" -i cover.jpg -map_metadata 0 -map 0 -map 1 out-"${f#./}" \
&& mv out-"${f#./}" "$f"; done

Usar ffmpeg para este problema es un poco como usar un misil de crucero para romper una tuerca. Las herramientas más especializadas de manipulación de metadatos ciertamente podrán hacer esto en un comando más limpio y corto.

maldad
fuente
66
El comando ffmpeg que se muestra aquí codificará el audio. Si está convirtiendo desde otro formato, está bien, pero si solo desea agregar arte a un mp3 existente sin volver a codificarlo, agréguelo -acodec copydespués de -map 1.
jsd
Esto no funciona para mí, ¿alguna razón en particular? Solo recibo el archivo mp3 pero no tengo una miniatura. @jsd
Chef Faraón
Lo siento @ChefPharaoh No sé por qué no te funciona. Intenté hacer wav-> mp3 mientras agregaba arte, y solo agregué arte a un mp3 existente con los comandos ffmpeg que se muestran arriba. Ambas veces funcionó bien.
jsd
@evilsoup No estoy seguro de si estoy haciendo algo súper malvado o incorrecto, pero puedo modificar mis archivos mp3 en su lugar mediante la sustitución del proceso. Simplifica un poco este script y parece ser súper rápido.
rien333
Funcionó como una delicia, y también encontré que ffmpeg era un poco más rápido que cojo :)
Tina
8

Para MP3:

eyeD3 --add-image="cover.jpg":FRONT_COVER "file.mp3"

Para FLAC:

metaflac --import-picture-from="cover.jpg" "file.flac"

OGG / Vorbis parece ser más complicado .

Rafael
fuente
5

Puedes usar la gema FancyAudio para esto. Puede agregar carátulas de álbum a archivos mp3. La documentación está disponible aquí .

caracteristicas

  1. agregar la carátula del álbum a un solo archivo mp3
  2. agregue la carátula del álbum a múltiples archivos mp3.

La siguiente captura de pantalla muestra la salida de fancy_audio cuando se ejecuta en una carpeta que contiene una imagen y múltiples archivos mp3

ingrese la descripción de la imagen aquí

La captura de pantalla siguiente muestra la salida de fancy_audio cuando se ejecuta en una carpeta que contiene archivos de imagen y mp3

Esta imagen muestra la salida de fancy_audio cuando se ejecuta en una carpeta que contiene archivos de imagen y mp3

Ajit Singh
fuente
Esto es fácil y funciona más rápido que lamecuando se agrega la misma imagen a múltiples archivos mp3. No necesita conocer a Ruby;) - este es un script independiente.
Tomasz Gandor
0

OP declara que preferiría que la portada se descargue de la web, y acabo de escribir un script bastante bien para usarlo , eye3Dy sacadambos instalables desde pip. eye3Des muy útil para este propósito ya que no parece volver a codificar el audio y el uso de la --to-v2.4bandera maneja cualquier archivo mp3, sin importar el tipo de etiqueta id3. El script debe iniciarse desde el directorio que contiene los archivos mp3. Se puede ejecutar sin argumentos, adivinando el artista y el nombre del álbum a partir de las etiquetas id3, o con nombres manuales como argumentos, por ejemplo embedart "pink floyd" "dark side of the moon". Está escrito para el shell de peces, pero debería ser fácilmente portátil para bash si cambia todos los comandos establecidos a asignaciones de variables bash.

function embedart
    if echo $argv | grep -q -e '-h'
       echo 'embedart "[Artist]" "[Album]"'
       return
    end

    if test $argv[1]
        set artist $argv[1]
        set album $argv[2]
    else
        set artist (eyed3 (ls *mp3 | head -1) | ggrep -oP "artist.*: \K.*" | head -1)
        if not test $artist
            echo "No artist found!"
            return
        end
        set album (eyed3 (ls *mp3 | head -1) | ggrep -oP "album.*: \K.*" | head -1)
        if not test $album
            echo "No album found!"
            return
        end
    end

    sacad $artist $album 350 cover.jpg -v warning 2> /dev/null > /dev/null
    eyeD3 --to-v2.4 --add-image "cover.jpg:FRONT_COVER" *mp3 -Q 2> /dev/null > /dev/null

    rm cover.jpg
    echo "Done!"
end
rien333
fuente
-1

eyeD3 no funciona con Unicode . Si hay caracteres que no son ascii en el nombre del archivo .mp3 (o incluso solo en un nombre de directorio ancestro, como el directorio Álbum), entonces se cancela. LTA

¡Entonces no tienes suerte si el título del álbum o la canción no está escrito en inglés!

Por ejemplo:

cp yoursong.mp3 /tmp/Странджанска.mp3
eyeD3 --add-image folder.jpg:FRONT_COVER Странджанска.mp3

Aparentemente, eyeD3 quiere poner la ruta completa del archivo .mp3 dentro del archivo .mp3 y no puede manejar caracteres que no sean ascii.

Excepción no detectada: el códec 'ascii' no puede codificar caracteres en la posición 5-16: el ordinal no está en el rango (128)
eyed3: ERROR: el códec 'ascii' no puede codificar caracteres en la posición 5-16: el ordinal no está en el rango (128)
Rastrear 
... (se omite el rastreo largo) ...
Jim Avera
fuente