Tambahkan sampul album-art ke file mp3 / ogg dari command-line dalam mode batch?

38

Saya mencari perangkat lunak di Linux, yang akan menambahkan album-art / sampul ke masing-masing file yang dipilih dalam mode batch. Seni album adalah jpg / png yang disimpan di komputer saya. Akan luar biasa jika dapat mengimpor dari internet.

Saat ini saya telah mencoba Rhythmbox dan Banshee. Saya juga sudah mencoba lamedan easytag, tetapi tampaknya mereka tidak mendukung mode batch. lameadalah tidak menambahkan properti, tapi Timpa. (Saya tahu lumpuh adalah satu - satunya baris perintah s / wi telah digunakan sejauh ini).

Jadi, pada dasarnya saya mencari:

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

Itu akan menambahkan gambar ke metadata file, secara permanen.

Bisakah Anda menyarankan saya perangkat lunak semacam itu?

BaRud
sumber

Jawaban:

24

timpang

Menggunakan lameAnda dapat melakukan ini menggunakan sedikit skrip:

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

Jika file diberi nama seperti ini, Anda dapat membuat skrip shell untuk melakukan apa yang Anda inginkan:

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

Anda dapat membuat hal di atas sedikit lebih kompak dan menghilangkan kebutuhan untuk sedmenggunakan bashmelakukannya dengan menghapus suffix yang cocok:

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

Picard / MusicBrainz

Jika Anda ingin melakukan ini dalam skala besar saya sarankan menggunakan Picard yang merupakan alat frontend untuk menggunakan database MusicBrainz. Ada plugin untuk Picard yang disebut "Cover Art Downloader", yang dapat melakukan ini ke kumpulan koleksi Anda.

Namun di atas tampaknya tidak didorong oleh baris perintah.

bit

Pilihan lain adalah menggunakan beets. Ini dapat didorong dari baris perintah dan memanfaatkan basis data MusicBrainz untuk sumber seni album.

Anda dapat sumber seni album menggunakan FetchArt Plugin atau menanamkannya menggunakan Plugin EmbedArt .

Pilihan lain?

Lihat juga tanya jawab pada U&L Q&A berjudul: Alat penandaan mp3 mana untuk Linux? . Ada beberapa alat alternatif yang tercantum di utas ini.

slm
sumber
Anda dapat menghindari sedpanggilan dengan sesuatu seperti albart="${i%.mp3}.jpg". Lebih penting lagi, saya baru saja menguji perintah lumpuh Anda dan mendapat lame: unrecognized option -i...
evilsoup
@ evilsoup - terima kasih, sakelarnya tidak ada tanda hubung. Seharusnya --ti ...
slm
@evilsoup - juga menambahkan umpan balik Anda tentang tidak menggunakan sed. Terima kasih!
slm
8
@ Exeleration-G - tidak, saya tidak akan merekomendasikan menggunakan lamekarena itu sebenarnya adalah encoder. Ada alat lain untuk hanya memanipulasi tag id3 dari mp3. Anda dapat menggunakan id3v2 -r "APIC" *.mp3atau eyeD3 --remove-all-images *.mp3menghapus gambar yang dilampirkan.
slm
2
FYI versi saya 3.99 tidak memiliki opsi "--ti" (debian buster) - eyeD3 tampaknya menjadi alternatif yang baik.
Benjamin Peter
17

Salah satu solusinya adalah dengan menggunakan ffmpeg:

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

Anda bisa meletakkan ini dalam for loop untuk melakukan setiap MP3 di direktori:

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

Ini akan membuat file output terpisah (jadi jika Anda memiliki file yang dipanggil foo.mp3, Anda akan berakhir dengan keduanya foo.mp3dan out-foo.mp3); ini karena ffmpeg tidak dapat menulis inputnya. Anda dapat memperbaikinya dengan sesuatu seperti:

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

Menggunakan ffmpeg untuk masalah ini sedikit seperti menggunakan rudal jelajah untuk memecahkan kacang. Alat manipulasi metadata yang lebih terspesialisasi tentu akan dapat melakukan ini dengan perintah yang lebih bersih dan lebih pendek.

Evilsoup
sumber
6
Perintah ffmpeg yang ditampilkan di sini akan menyandikan audio. Jika Anda mengonversi dari format lain, tidak apa-apa, tetapi jika Anda hanya ingin menambahkan seni ke mp3 yang sudah ada tanpa menyandikan ulang, tambahkan -acodec copysetelah -map 1.
jsd
Ini tidak bekerja untuk saya, ada alasan khusus? Saya hanya mendapatkan file mp3 tetapi tidak ada thumbnail. @ jsd
Chef Firaun
Maaf @ChefPharaoh, saya tidak tahu mengapa itu tidak berhasil untuk Anda. Saya baru saja mencoba melakukan wav-> mp3 sambil menambahkan seni, dan hanya menambahkan seni ke mp3 yang sudah ada dengan perintah-perintah ffmpeg yang ditunjukkan di atas. Kedua kali itu bekerja dengan baik.
jsd
@ evilsoup Saya tidak yakin apakah saya melakukan sesuatu yang super jahat atau salah, tetapi saya dapat memodifikasi file mp3 saya di tempat menggunakan proses substitusi. Agak menyederhanakan skrip ini dan sepertinya sangat cepat.
rien333
Bekerja seperti camilan, dan saya juga menemukan ffmpeg sedikit lebih cepat daripada lumpuh :)
Tina
8

Untuk MP3:

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

Untuk FLAC:

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

OGG / Vorbis tampaknya lebih rumit .

Raphael
sumber
5

Anda dapat menggunakan permata FancyAudio untuk ini. Itu dapat menambahkan sampul album ke file mp3. Dokumentasi tersedia di sini .

fitur

  1. tambahkan sampul album ke satu file mp3
  2. tambahkan sampul album ke beberapa file mp3.

Tangkapan layar di bawah ini menunjukkan output dari fancy_audio saat dijalankan di folder yang berisi gambar dan beberapa file mp3

masukkan deskripsi gambar di sini

Tangkapan layar di bawah ini menunjukkan output dari fancy_audio saat dijalankan di folder yang berisi file mp3 dan gambar

Gambar ini menunjukkan output dari fancy_audio saat dijalankan di folder yang berisi file mp3 dan gambar

Ajit Singh
sumber
Ini mudah, dan bekerja lebih cepat daripada lamesaat menambahkan gambar yang sama ke banyak file mp3. Anda tidak perlu tahu Ruby;) - ini adalah skrip mandiri.
Tomasz Gandor
0

OP menyatakan bahwa dia akan lebih suka jika sampulnya diunduh dari web, dan saya baru saja menulis skrip yang cukup oke untuk itu menggunakan eye3Ddan sacad, keduanya dapat diinstal dari pip. eye3Dsangat berguna untuk tujuan ini karena tampaknya tidak menyandikan ulang audio dan menggunakan --to-v2.4flag menangani file mp3 apa pun, apa pun jenis tag id3. Skrip harus diluncurkan dari direktori yang berisi file mp3. Itu dapat dijalankan tanpa argumen, menebak nama artis dan album dari tag id3, atau dengan nama manual sebagai argumen, misalnya embedart "pink floyd" "dark side of the moon". Ini ditulis untuk shell ikan, tetapi harus mudah dibawa-bawa untuk bash jika Anda mengubah semua perintah yang ditetapkan ke bash variabel assigment.

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

eyeD3 tidak bekerja dengan Unicode . Jika ada karakter non-ascii dalam nama file .mp3 (atau bahkan hanya dalam nama direktori leluhur, seperti direktori Album), maka itu dibatalkan. LTA.

Jadi, Anda kurang beruntung jika judul Album atau Lagu tidak ditulis dalam bahasa Inggris!

Sebagai contoh:

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

Rupanya eyeD3 ingin meletakkan path lengkap file .mp3 di dalam file .mp3 dan tidak dapat menangani karakter non-ascii.

Pengecualian tanpa tertangkap: codec 'ascii' tidak dapat menyandikan karakter di posisi 5-16: ordinal tidak dalam jangkauan (128)
eyed3: ERROR: 'ascii' codec tidak dapat menyandikan karakter di posisi 5-16: ordinal tidak dalam jangkauan (128)
Melacak kembali 
... (traceback lama dihilangkan) ...
Jim Avera
sumber