Toplu modda komut satırından mp3 / ogg dosyasına albüm kapağı ekle?


38

Linux'ta, seçilen modların her birine albüm resmini / kapaklarını toplu modda ekleyen bir yazılım arıyorum. Albüm resmi bilgisayarımda depolanan bir jpg / png. İnternetten ithal edebiliyorsa harika olacak.

Şu anda hem Rhythmbox hem de Banshee'yi denedim. Ben de denedim lameve easytag, ama toplu iş modunu desteklemedikleri görülüyor. lameolduğu değil özelliklerini ekleyerek, ancak üzerine yazma. (Lame'nin şu ana kadar kullandığı tek komut satırı olduğunu biliyorum ).

Yani, temelde ben arıyorum:

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

Bu, dosyayı kalıcı olarak dosyanın meta verilerine ekleyecektir.

Bana böyle bir yazılım önerebilir misiniz?

Yanıtlar:


24

topal

Kullanımı lamebiraz komut kullanarak bunu yapabilirsiniz:

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

Dosyalar buna benzer bir adla adlandırılmışsa, istediğiniz şeyi yapmak için bir kabuk betiği yapabilirsiniz:

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

Yukarıdaki biraz daha kompakt hale ve ihtiyacını ortadan kaldırabilir sedkullanarak bashbu eşleştirme ekini kaldırmak alarak bunu yapmak için:

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

Picard / MusicBrainz

Bunu daha büyük bir ölçekte yapmak istiyorsanız, MusicBrainz veritabanını kullanmak için ön uç aracı olan Picard'ı kullanmanızı öneririm. Picard'ın "Cover Art Downloader" adlı bir eklentisi var.

Yukarıdakiler, komut satırı tarafından yönlendirilmiş gibi görünmüyor.

pancar

Başka bir seçenek kullanmak olacaktır beets. Bu komut satırından çalıştırılabilir ve albüm resmini almak için MusicBrainz veritabanını kullanır.

Ya kullanarak albüm kapağını olabilir kaynak FetchArt Plugin kullanarak veya gömün EmbedArt Plugin .

Diğer seçenekler?

Ayrıca daha önce sorulan U&L Soru ve Cevaplarına bir göz atın: Linux için hangi mp3 etiketleme aracı? . Bu başlıkta listelenen çeşitli alternatif araçlar vardır.


sedArama gibi bir şey ile önleyebilirsiniz albart="${i%.mp3}.jpg". Daha da önemlisi, ben sadece topal emrini test ettim ve anladım lame: unrecognized option -i...
evilsoup

@ evilsoup - teşekkürler, anahtar bir çizgi eksikti. Olmalı --ti ...
slm

@evilsoup - kullanmadığınıza ilişkin geri bildiriminizi de ekleyin sed. Teşekkürler!
slm

7
@ Exeleration-G - hayır lame, aslında bir kodlayıcı olduğu için kullanmanızı tavsiye etmem . Bir mp3'ün sadece id3 etiketlerini değiştirmek için başka araçlar var. Ekli resimleri kaldırmak için id3v2 -r "APIC" *.mp3veya kullanabilirsiniz eyeD3 --remove-all-images *.mp3.
slm

1
FYI sürüm 3.99 "- t" seçeneğine sahip değil (debian buster) - eyeD3 iyi bir alternatif gibi görünüyor.
Benjamin Peter

17

Bir çözüm ffmpeg kullanmak olacaktır:

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

Bir dizindeki her MP3'ü yapmak için bunu for döngüsüne koyabilirsiniz:

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

(Eğer adlı bir dosya varsa böylece bu ayrı bir çıkış dosya oluşturur foo.mp3, her iki ile sona erecek foo.mp3ve out-foo.mp3); Bunun nedeni, ffmpeg'nin girişi üzerine yazamamasıdır. Bunu şöyle bir şeyle düzeltebilirsiniz:

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

Bu sorun için ffmpeg kullanmak, biraz fındık kırmak için seyir füzesi kullanmak gibi. Daha özel meta veri işleme araçları, kesinlikle daha temiz ve kısa bir komutla bunu yapabilecektir.


6
Burada gösterilen ffmpeg komutu sesi kodlar. Başka bir formattan dönüştürüyorsanız, sorun değil, ancak varolan bir mp3’e yeniden kodlamadan sanat eklemek istiyorsanız, -acodec copysonradan ekleyin -map 1.
jsd

Bu benim için çalışmıyor, herhangi bir sebep var mı? Sadece mp3 dosyasını alıyorum ama küçük resim alamıyorum. @jsd
Şef Firavun

Üzgünüz @ChefPharaoh Neden sizin için işe yaramadığını bilmiyorum. Sadece resim eklerken wav-> mp3 yapmayı denedim ve sadece yukarıda gösterilen ffmpeg komutlarıyla varolan bir mp3'e resim ekledim. İki kere iyi çalıştı.
JS

@ evilsoup Süper kötü ya da yanlış bir şey yaptığımdan emin değilim, ancak mp3 dosyamı yerine işlem değiştirme özelliğini kullanarak değiştirebiliyorum. Kinda bu senaryoyu basitleştiriyor ve süper hızlı gibi görünüyor.
rien333

Bir muamele gibi çalıştı ve ayrıca ffmpeg'in topaltan biraz daha hızlı olduğunu gördüm :)
Tina

7

MP3 için:

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

FLAC için:

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

OGG / Vorbis daha karmaşık görünüyor .


5

Bunun için FancyAudio gem kullanabilirsiniz . MP3 dosyalarına albüm resmi ekleyebilir. Belgeler burada mevcuttur .

özellikleri

  1. tek mp3 dosyasına albüm resmi ekle
  2. Birden fazla mp3 dosyasına albüm resmi ekleyin.

Ekran görüntüsünün altındaki resim ve çoklu mp3 dosyaları içeren bir klasörde çalıştırdığınızda fancy_audio çıktısını gösterir

görüntü tanımını buraya girin

Aşağıdaki ekran görüntüsü mp3 ve resim dosyalarını içeren bir klasörde çalıştırıldığında fancy_audio çıkışını gösterir

Bu görüntü mp3 ve resim dosyalarını içeren bir klasörde çalıştırıldığında fancy_audio çıkışını gösterir


Bu kolaydır ve lameaynı görüntüyü birden fazla mp3 dosyasına eklemekten daha hızlı çalışır . Ruby'yi bilmenize gerek yok;) - bu bağımsız bir komut dosyasıdır.
Tomasz Gandor

0

Kapak Web'den indirilen eğer OP devletler o tercih edeceğini ve sadece için oldukça iyi senaryo yazdığını kullanarak eye3Dve sacad, pipten hem Kurulabilir. id3 etiketinin türü ne olursa olsun, eye3Dsesi yeniden kodlamadığı ve --to-v2.4bayrağını kullanan herhangi bir mp3 dosyasını kullanmadığı için bu amaç için çok kullanışlıdır . Komut dosyası, mp3 dosyalarını içeren dizinden başlatılmalıdır. Hiçbir argüman olmadan çalıştırılabilir, sanatçı ve albüm adını id3 etiketlerinden tahmin edebilir veya manuel isimlerle argüman olarak kullanabilirsiniz, örn embedart "pink floyd" "dark side of the moon". Balık kabuğu için yazılmıştır, ancak tüm komutları bash değişken atamaları olarak değiştirirseniz kolayca bash'a taşınabilir olmalıdır.

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 Unicode ile çalışmıyor . Herhangi bir ascii olmayan karakter .mp3 dosya adındaysa (veya hatta Albüm dizini gibi bir ata dizini adındaysa), iptal eder. LTA.

Albüm veya Şarkı başlığı İngilizce olarak yazılmıyorsa, şansınız kalmaz!

Örneğin:

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

Görünüşe göre eyeD3, .mp3 dosyasının tam yolunu .mp3 dosyasının içine koymak istiyor ve ascii olmayan karakterleri işleyemiyor.

Yakalanmamış istisna: 'ascii' kodeği, 5-16 konumundaki karakterleri kodlayamıyor: sıra, aralık içinde değil (128)
eyed3: ERROR: 'ascii' codec bileşeni 5-16 konumundaki karakterleri kodlayamıyor: sıra aralığında değil (128)
Geri iz 
... (uzun izleme ihmal edildi) ...
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.