Adicionar capa de capa do álbum ao arquivo mp3 / ogg na linha de comando no modo em lote?

38

Estou procurando um software no Linux, que adicione a capa do álbum / capa a cada um dos arquivos selecionados no modo em lote. A arte do álbum é um jpg / png armazenado no meu computador. Será incrível se puder importar da Internet.

Atualmente, tentei o Rhythmbox e o Banshee. Eu também tentei lamee easytag, mas parece que eles não suportam o modo em lote. nãolame está adicionando as propriedades, mas substituindo. (Eu sei que coxo é a única linha de comando que s / wi já usou até agora).

Então, basicamente, estou procurando:

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

Isso adicionará a imagem aos metadados do arquivo, permanentemente.

Você pode me sugerir algum desses softwares?

BaRud
fonte

Respostas:

24

coxo

Usando lamevocê pode fazer isso usando um pouco de script:

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

Se os arquivos tiverem algo assim, você poderá criar um script de shell para fazer o que quiser:

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

Você pode tornar as opções acima um pouco mais compactas e eliminar a necessidade de sedusá bash-las removendo o sufixo correspondente:

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

Picard / MusicBrainz

Se você quiser fazer isso em larga escala, sugiro usar o Picard, que é a ferramenta de front-end para usar o banco de dados MusicBrainz. Existe um plugin para Picard chamado "Cover Art Downloader", que pode fazer isso em lotes da sua coleção.

O item acima não parece ser direcionado pela linha de comando.

beterraba

Outra opção seria usar beets. Isso pode ser obtido na linha de comando e utiliza o banco de dados MusicBrainz para obter a arte do álbum.

Você pode obter a arte do álbum usando o FetchArt Plugin ou incorporá-lo usando o Plug-in EmbedArt .

Outras opções?

Dê uma olhada também nas perguntas e respostas feitas anteriormente na U&L, intituladas: Qual ferramenta de marcação de mp3 para Linux? . Existem várias ferramentas alternativas listadas neste tópico.

slm
fonte
Você pode evitar a sedligação com algo parecido albart="${i%.mp3}.jpg". Mais importante, eu só testou o seu comando coxo e tenho lame: unrecognized option -i...
evilsoup
@evilsoup - obrigado, o interruptor estava faltando um traço. Deveria ser --ti ...
slm
@evilsoup - também adicionou seus comentários sobre a não utilização sed. Obrigado!
slm
8
@ Exeleration-G - não, eu não recomendaria o uso, lamepois na verdade é um codificador. Existem outras ferramentas para manipular apenas as tags id3 de um mp3. Você pode usar id3v2 -r "APIC" *.mp3ou eyeD3 --remove-all-images *.mp3remover qualquer imagem anexada.
slm
2
FYI minha versão 3.99 não tem uma opção "--ti" (debian buster) - eyeD3 parece ser uma boa alternativa.
Benjamin Peter
17

Uma solução seria usar o ffmpeg:

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

Você pode colocar isso em um loop for para fazer todos os MP3 em um diretório:

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

Isso criará um arquivo de saída separado (portanto, se você tiver um arquivo chamado foo.mp3, você terminará com ambos foo.mp3e out-foo.mp3); isso ocorre porque o ffmpeg não pode escrever sobre sua entrada. Você pode corrigir isso com 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 esse problema é um pouco como usar um míssil de cruzeiro para quebrar uma noz. Ferramentas de manipulação de metadados mais especializadas certamente conseguirão fazer isso em um comando mais limpo e mais curto.

evilsoup
fonte
6
O comando ffmpeg mostrado aqui codifica o áudio. Se você estiver convertendo de outro formato, tudo bem, mas se você quiser adicionar arte a um mp3 existente sem recodificá-lo, adicione -acodec copydepois do -map 1.
JSD
Isso não está funcionando para mim, por algum motivo específico? Eu só recebo o arquivo mp3, mas nenhuma miniatura. @jsd
Chef Pharaoh
Desculpe @ChefPharaoh Não sei por que não está funcionando para você. Eu apenas tentei fazer wav-> mp3 ao adicionar arte e apenas adicionar arte a um mp3 existente com os comandos ffmpeg mostrados acima. Ambas as vezes funcionou bem.
JSD
@evilsoup Não tenho certeza se estou fazendo algo super mal ou errado, mas consigo modificar meus arquivos mp3 no lugar usando a substituição do processo. Meio que simplifica esse script e parece ser super rápido.
rien333
Funcionou como um presente, e eu também achei o ffmpeg um pouco mais rápido que o coxo :)
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 mais complicado .

Rafael
fonte
5

Você pode usar a gema FancyAudio para isso. Ele pode adicionar capas de álbuns a arquivos mp3. A documentação está disponível aqui .

características

  1. adicionar arte do álbum ao único arquivo mp3
  2. adicione a arte do álbum a vários arquivos mp3.

A captura de tela abaixo mostra a saída de fancy_audio quando executada em uma pasta contendo uma imagem e vários arquivos mp3

insira a descrição da imagem aqui

A captura de tela abaixo mostra a saída de fancy_audio quando executada em uma pasta que contém arquivos de imagem e mp3

Esta imagem mostra a saída de fancy_audio quando executada em uma pasta que contém arquivos de imagem e mp3

Ajit Singh
fonte
Isso é fácil e funciona mais rápido do que lameao adicionar a mesma imagem a vários arquivos mp3. Você não precisa conhecer Ruby;) - este é um script independente.
Tomasz Gandor
0

O OP afirma que ele preferiria se a capa fosse baixada da Web, e eu acabei de escrever um script bastante bom para esse uso eye3De sacad, ambos instaláveis ​​no pip. eye3Dé muito útil para esse fim, pois não parece recodificar o áudio e o uso do --to-v2.4sinalizador lida com qualquer arquivo mp3, independentemente do tipo de tag id3. O script deve ser iniciado a partir do diretório que contém os arquivos mp3. Pode ser executado sem argumentos, adivinhando o nome do artista e do álbum a partir das tags id3, ou com nomes manuais como argumentos, por exemplo embedart "pink floyd" "dark side of the moon". Ele foi escrito para a casca do peixe, mas deve ser facilmente transportável para o bash se você alterar todos os comandos set para bash as atribuições de variáveis.

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
fonte
-1

O eyeD3 não funciona com Unicode . Se houver caracteres não-ascii no nome do arquivo .mp3 (ou mesmo em apenas um nome de diretório ancestral, como o diretório do Álbum), ele será abortado. LTA.

Portanto, você não terá sorte se o título do álbum ou da música não estiver escrito em inglês!

Por exemplo:

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

Aparentemente, o eyeD3 deseja colocar o caminho completo do arquivo .mp3 dentro do arquivo .mp3 e não pode manipular caracteres não-ascii.

Exceção não capturada: o codec 'ascii' não pode codificar caracteres na posição 5-16: ordinal fora do intervalo (128)
eyed3: ERRO: o codec 'ascii' não pode codificar caracteres na posição 5-16: ordinal fora do intervalo (128)
Traceback 
... (longo rastreamento omitido) ...
Jim Avera
fonte