Adiciona capa de álbum-arte ao arquivo mp3 / ogg da linha de comando no modo batch?

33

Eu estou procurando um software no Linux, que irá adicionar o álbum de arte / capa para cada um dos arquivos selecionados no modo de lote. A arte do álbum é um jpg / png armazenado no meu computador. Será incrível se puder importar da internet.

Atualmente, experimentei o Rhythmbox e o Banshee. Eu também tentei lame e easytag , mas parece que eles não suportam o modo de lote. lame é não adicionando as propriedades, mas sobrescrevendo. (Eu sei que o coxo é a única linha de comando que usei até agora).

Então, basicamente eu 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 software desse tipo?

    
por BaRud 30.07.2013 / 16:46

6 respostas

19

lame

Usando lame , você pode fazer isso usando um pequeno script:

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

Se os arquivos tiverem nomes assim, você pode 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 o acima um pouco mais compacto e eliminar a necessidade de sed usando bash para fazer isso, removendo o sufixo correspondente:

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

Picard / MusicBrainz

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

No entanto, o acima não parece ser direcionado por linha de comando.

beterraba

Outra opção seria usar beets . Isso pode ser feito a partir da linha de comando e faz uso do banco de dados MusicBrainz para obter a arte do álbum.

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

Outras opções?

Veja também as perguntas e respostas sobre as perguntas e respostas anteriores: Qual ferramenta de marcação de mp3 para Linux? . Existem várias ferramentas alternativas listadas neste tópico.

    
por 30.07.2013 / 21:37
13

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 , terminará com foo.mp3 e out-foo.mp3 ); isto é 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 o 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 serão capazes de fazer isso em um comando mais limpo e mais curto.

    
por 30.07.2013 / 20:54
6

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 .

    
por 01.11.2016 / 21:35
5

Você pode usar a FancyAudio para isso. Pode adicionar arte de álbum a arquivos de mp3. A Documentação está disponível aqui .

recursos

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

Abaixo, a captura de tela mostra a saída de fancy_audio quando executada em uma pasta que contém uma imagem e vários arquivos mp3

Abaixo,acapturadetelamostraasaídadefancy_audioquandoexecutadaemumapastacontendoarquivosdeimagememp3

    
por 22.07.2015 / 04:48
0

O OP afirma que ele preferiria se a capa fosse baixada da web, e eu apenas escrevi um script bem legal para isso usando eye3D e sacad , ambos instaláveis a partir do pip. eye3D é muito útil para esse propósito, já que não parece codificar novamente o áudio e usar o --to-v2.4 flag lida com qualquer arquivo mp3, não importando o tipo de tag id3. O script deve ser iniciado a partir do diretório que contém os arquivos mp3. Ele pode ser executado sem argumentos, adivinhando o nome do artista e do álbum das tags id3 ou com nomes manuais como argumentos, por exemplo, %código%. Ele é escrito para o fish shell, mas deve ser facilmente portável para bash se você alterar todos os comandos set para basear as assigmentações 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
    
por 11.08.2017 / 16:03
-1

eyeD3 não funciona com Unicode . Se algum caractere não-ascii estiver no nome do arquivo .mp3 (ou mesmo em apenas um nome de diretório ancestral, como o diretório Album), ele será anulado. LTA

Então você está sem 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 quer colocar o caminho completo do arquivo .mp3 dentro do arquivo .mp3 e não pode manipular caracteres não ascii.

Uncaught exception: 'ascii' codec can't encode characters in position 5-16: ordinal not in range(128)
eyed3:ERROR: 'ascii' codec can't encode characters in position 5-16: ordinal not in range(128)
Traceback 
...(long traceback omitted)...
    
por 16.03.2018 / 06:53