Czy dodać okładkę albumu do pliku mp3 / ogg z wiersza poleceń w trybie wsadowym?


38

Szukam oprogramowania w systemie Linux, które doda okładkę albumu / okładkę do każdego z wybranych plików w trybie wsadowym. Album jest plikiem jpg / png przechowywanym na moim komputerze. Będzie super, jeśli będzie można je importować z Internetu.

Obecnie próbowałem zarówno Rhythmbox, jak i Banshee. Próbowałem również lamei easytag, ale wydaje się, że nie obsługują one trybu wsadowego. lamejest nie dodawanie właściwości, ale nadpisywania. (Wiem, że lame jest jedyną dotychczas używaną linią poleceń).

Zasadniczo szukam:

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

Spowoduje to dodanie zdjęcia do metadanych pliku na stałe.

Czy możesz mi zasugerować takie oprogramowanie?

Odpowiedzi:


24

kulawy

Za pomocą lamemożesz to zrobić za pomocą małego skryptu:

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

Jeśli pliki mają taką nazwę, możesz utworzyć skrypt powłoki, aby zrobić to, co chcesz:

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

Można dokonać powyższego nieco bardziej zwarty i wyeliminować potrzebę sedza pomocą bashzrobić to poprzez to usunąć rozszerzenie dopasowanie:

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

Picard / MusicBrainz

Jeśli chcesz to zrobić na dużą skalę, sugeruję użycie Picarda, który jest narzędziem do obsługi bazy danych MusicBrainz. Do Picarda dostępna jest wtyczka o nazwie „Cover Art Downloader”, która może to zrobić dla partii twojej kolekcji.

Powyższe nie wydaje się być oparte na linii poleceń.

buraki

Inną opcją byłoby użycie beets. Można to uruchomić z wiersza poleceń i korzysta z bazy danych MusicBrainz do pozyskiwania okładek albumów.

Możesz pobrać grafikę albumu za pomocą wtyczki FetchArt lub osadzić ją za pomocą wtyczki EmbedArt .

Inne opcje?

Spójrz także na to zadawane wcześniej pytanie U&L zatytułowane: Które narzędzie do znakowania plików mp3 dla systemu Linux? . Istnieje kilka alternatywnych narzędzi wymienionych w tym wątku.


Możesz uniknąć sedpołączenia za pomocą czegoś takiego albart="${i%.mp3}.jpg". Co ważniejsze, właśnie przetestowałem twoje lame: unrecognized option -i
słabe

@evilsoup - dzięki, przełącznik nie miał kreski. Powinno być --ti ...
slm

@evilsoup - także dodał swoją opinię na temat nieużywania sed. Dzięki!
slm

7
@ Exeleration-G - nie, nie polecałbym używania, lameponieważ tak naprawdę jest to enkoder. Istnieją inne narzędzia do manipulowania tagami id3 pliku mp3. Możesz użyć id3v2 -r "APIC" *.mp3lub, eyeD3 --remove-all-images *.mp3aby usunąć załączone obrazy.
slm

1
Dla twojej wersji 3.99 nie ma opcji „--ti” (debian buster) - eyeD3 wydaje się być dobrą alternatywą.
Benjamin Peter,

17

Jednym z rozwiązań byłoby użycie ffmpeg:

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

Możesz umieścić to w pętli for, aby wykonać każdy plik MP3 w katalogu:

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

Spowoduje to utworzenie osobnego pliku wyjściowego (więc jeśli masz plik o nazwie foo.mp3, skończysz na obu foo.mp3i out-foo.mp3); dzieje się tak, ponieważ ffmpeg nie może nadpisywać danych wejściowych. Możesz to naprawić za pomocą:

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

Użycie ffmpeg do rozwiązania tego problemu przypomina trochę użycie pocisku wycieczkowego do złamania orzecha. Bardziej wyspecjalizowane narzędzia do manipulacji metadanymi z pewnością będą w stanie to zrobić za pomocą czystszego, krótszego polecenia.


6
Pokazane tutaj polecenie ffmpeg spowoduje zakodowanie dźwięku. Jeśli konwertujesz z innego formatu, to dobrze, ale jeśli chcesz po prostu dodać grafikę do istniejącego pliku mp3 bez ponownego kodowania, dodaj -acodec copypo -map 1.
jsd

To nie działa dla mnie, jakiś konkretny powód? Dostaję tylko plik mp3, ale nie mam miniatury. @jsd
Chef Pharaoh

Przepraszam @ChefPharaoh Nie wiem, dlaczego to dla ciebie nie działa. Właśnie próbowałem zrobić wav-> mp3 podczas dodawania grafiki i po prostu dodawałem grafikę do istniejącego pliku mp3 za pomocą powyższych poleceń ffmpeg. Za każdym razem działało dobrze.
jsd

@evilsoup Nie jestem pewien, czy robię coś bardzo złego czy złego, ale jestem w stanie zmodyfikować moje pliki mp3 na miejscu za pomocą zastępowania procesów. Trochę upraszcza ten skrypt i wydaje się być super szybki.
rien333

Działa jak uczta, a ja zauważyłem, że ffmpeg jest nieco szybszy niż lame :)
Tina

7

Dla MP3:

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

W przypadku FLAC:

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

OGG / Vorbis wydaje się bardziej skomplikowane .


5

Możesz do tego użyć klejnotu FancyAudio . Może dodawać okładki albumów do plików mp3. Dokumentacja jest dostępna tutaj .

cechy

  1. dodaj okładkę albumu do pojedynczego pliku mp3
  2. dodaj okładkę albumu do wielu plików mp3.

Poniższy zrzut ekranu pokazuje wyjście fancy_audio po uruchomieniu w folderze zawierającym obraz i wiele plików mp3

wprowadź opis zdjęcia tutaj

Poniższy zrzut ekranu pokazuje wyjście fancy_audio po uruchomieniu w folderze zawierającym pliki mp3 i obrazy

Ten obraz pokazuje wyjście fancy_audio po uruchomieniu w folderze zawierającym pliki mp3 i obrazy


Jest to łatwe i działa szybciej niż lamepodczas dodawania tego samego obrazu do wielu plików mp3. Nie musisz znać Ruby;) - jest to samodzielny skrypt.
Tomasz Gandor

0

OP twierdzi, że wolałby, gdyby okładka została pobrana z Internetu, a ja właśnie napisałem całkiem dobry skrypt do tego, używając eye3Di sacad, oba instalowalne z pip. eye3Djest bardzo przydatny do tego celu, ponieważ nie wydaje się, aby ponownie kodował dźwięk, a użycie --to-v2.4flagi obsługuje dowolne pliki mp3, bez względu na typ znacznika id3. Skrypt powinien zostać uruchomiony z katalogu zawierającego pliki mp3. Można go uruchamiać bez argumentów, zgadując nazwę wykonawcy i albumu na podstawie znaczników id3 lub z ręcznymi nazwami jako argumentami, np embedart "pink floyd" "dark side of the moon". Jest napisany dla skorupy ryby, ale powinien łatwo być przenośny, aby walić, jeśli zmienisz wszystkie ustawione polecenia, aby walić zmienne zadania.

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

-1

eyeD3 nie działa z Unicode . Jeśli w nazwie pliku .mp3 znajdują się jakiekolwiek znaki inne niż ascii (lub nawet w nazwie katalogu nadrzędnego, na przykład katalogu Album), zostanie ono przerwane. LTA.

Nie masz szczęścia, jeśli tytuł albumu lub utworu nie jest napisany w języku angielskim!

Na przykład:

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

Najwyraźniej eyeD3 chce umieścić pełną ścieżkę pliku .mp3 w pliku .mp3 i nie może obsługiwać znaków innych niż ascii.

Nieprzechwycony wyjątek: kodek „ascii” nie może kodować znaków na pozycjach 5-16: porządek poza zakresem (128)
eyed3: ERROR: kodek „ascii” nie może kodować znaków na pozycjach 5-16: porządek poza zakresem (128)
Traceback 
... (pominięto długi ślad) ...
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.