Thêm bìa album-art vào tệp mp3 / ogg từ dòng lệnh trong chế độ hàng loạt?


38

Tôi đang tìm kiếm một phần mềm trong Linux, sẽ thêm album-art / cover vào từng tệp được chọn ở chế độ hàng loạt. Album nghệ thuật là một jpg / png được lưu trữ trong máy tính của tôi. Sẽ thật tuyệt vời nếu nó có thể nhập từ internet.

Hiện tại tôi đã thử cả Rhybeatbox và Banshee. Tôi cũng đã thử lameeasytag, nhưng dường như họ không hỗ trợ chế độ hàng loạt. lamekhông thêm các thuộc tính, nhưng ghi đè. (Tôi biết què là dòng lệnh duy nhất s / wi đã sử dụng cho đến nay).

Vì vậy, về cơ bản tôi đang tìm kiếm:

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

Điều đó sẽ thêm hình ảnh vào siêu dữ liệu của tập tin, vĩnh viễn.

Bạn có thể gợi ý cho tôi bất kỳ phần mềm như vậy?

Câu trả lời:


24

què

Sử dụng lamebạn có thể làm điều này bằng cách sử dụng một đoạn script nhỏ:

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

Nếu các tệp được đặt tên như thế này, bạn có thể tạo một tập lệnh shell để làm những gì bạn muốn:

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

Bạn có thể làm cho phần trên gọn hơn một chút và loại bỏ sự cần thiết sedbằng cách sử dụng bashđể làm điều đó bằng cách loại bỏ hậu tố phù hợp:

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

Picard / MusicBrainz

Nếu bạn muốn làm điều này trên quy mô lớn, tôi khuyên bạn nên sử dụng Picard, công cụ lối vào để sử dụng cơ sở dữ liệu MusicBrainz. Có một plugin cho Picard có tên là "Cover Art Downloader", có thể làm điều này với các đợt trong bộ sưu tập của bạn.

Tuy nhiên, ở trên dường như không phải là dòng lệnh điều khiển.

củ cải

Một lựa chọn khác là sử dụng beets. Điều này có thể được điều khiển từ dòng lệnh và sử dụng cơ sở dữ liệu MusicBrainz để tìm nguồn cung cấp album nghệ thuật.

Bạn có thể tìm nguồn ảnh bìa album bằng FetchArt Plugin hoặc nhúng nó bằng Plugin EmbedArt .

Sự lựa chọn khác?

Ngoài ra, hãy xem phần hỏi đáp trước đó của U & L có tiêu đề: Công cụ gắn thẻ mp3 nào cho Linux? . Có một số công cụ thay thế được liệt kê trong chủ đề này.


Bạn có thể tránh sedcuộc gọi với một cái gì đó như albart="${i%.mp3}.jpg". Quan trọng hơn, tôi vừa thử lệnh khập khiễng của bạn và nhận được lame: unrecognized option -i...
evilsoup

@evilsoup - cảm ơn, công tắc bị thiếu một dấu gạch ngang. Nên --ti ...
slm

@evilsoup - cũng đã thêm phản hồi của bạn về việc không sử dụng sed. Cảm ơn!
slm

7
@ Exeleration-G - không tôi không khuyên bạn nên sử dụng lamevì nó thực sự là một bộ mã hóa. Có các công cụ khác để thao tác các thẻ id3 của mp3. Bạn có thể sử dụng id3v2 -r "APIC" *.mp3hoặc eyeD3 --remove-all-images *.mp3để loại bỏ bất kỳ hình ảnh đính kèm.
slm

1
FYI phiên bản 3.99 của tôi không có tùy chọn "--ti" (debian buster) - eyeD3 dường như là một lựa chọn tốt.
Benjamin Peter

17

Một giải pháp sẽ là sử dụng ffmpeg:

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

Bạn có thể đặt cái này trong một vòng lặp for để thực hiện mọi MP3 trong một thư mục:

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

Điều này sẽ tạo một tệp đầu ra riêng biệt (vì vậy nếu bạn có một tệp được gọi foo.mp3, bạn sẽ kết thúc bằng cả hai foo.mp3out-foo.mp3); điều này là do ffmpeg không thể ghi trên đầu vào của nó. Bạn có thể sửa lỗi này bằng một cái gì đó như:

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

Sử dụng ffmpeg cho vấn đề này cũng giống như sử dụng tên lửa hành trình để bẻ khóa đai ốc. Các công cụ thao tác siêu dữ liệu chuyên dụng hơn chắc chắn sẽ có thể thực hiện việc này trong một lệnh ngắn hơn, gọn gàng hơn.


6
Lệnh ffmpeg hiển thị ở đây sẽ mã hóa âm thanh. Nếu bạn đang chuyển đổi từ định dạng khác, điều đó tốt, nhưng nếu bạn chỉ muốn thêm nghệ thuật vào một mp3 hiện có mà không mã hóa lại, hãy thêm -acodec copyvào sau -map 1.
jsd

Điều này không làm việc cho tôi, lý do cụ thể? Tôi chỉ nhận được tệp mp3 nhưng không có hình thu nhỏ. @jsd
Đầu bếp Pharaoh

Xin lỗi @ChefPharaoh Tôi không biết tại sao nó không hiệu quả với bạn. Tôi vừa thử làm wav-> mp3 trong khi thêm nghệ thuật, vừa thêm nghệ thuật vào một mp3 hiện có với các lệnh ffmpeg được hiển thị ở trên. Cả hai lần nó hoạt động tốt.
jsd

@evilsoup Tôi không chắc mình đang làm điều gì đó siêu ác hay sai, nhưng tôi có thể sửa đổi các tệp mp3 của mình tại chỗ bằng cách sử dụng thay thế quy trình. Kinda đơn giản hóa kịch bản này và nó dường như là siêu nhanh.
rien333

Làm việc như một điều trị, và tôi cũng thấy ffmpeg nhanh hơn một chút so với què :)
Tina

7

Đối với MP3:

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

Đối với FLAC:

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

OGG / Vorbis dường như phức tạp hơn .


5

Bạn có thể sử dụng đá quý FancyAudio cho việc này. Nó có thể thêm album nghệ thuật vào các tập tin mp3. Tài liệu có sẵn ở đây .

Tính năng, đặc điểm

  1. thêm album nghệ thuật vào tập tin mp3 duy nhất
  2. thêm album nghệ thuật vào nhiều tập tin mp3.

Ảnh chụp màn hình bên dưới hiển thị đầu ra của Fancy_audio khi chạy trong thư mục chứa hình ảnh và nhiều tệp mp3

nhập mô tả hình ảnh ở đây

Ảnh chụp màn hình bên dưới hiển thị đầu ra của Fancy_audio khi chạy trong thư mục chứa tệp mp3 và hình ảnh

Hình ảnh này hiển thị đầu ra của Fancy_audio khi chạy trong thư mục chứa tệp mp3 và hình ảnh


Điều này thật dễ dàng và hoạt động nhanh hơn so với lamekhi thêm cùng một hình ảnh vào nhiều tệp mp3. Bạn không cần biết Ruby;) - đây là một tập lệnh độc lập.
Tomasz Gandor

0

OP nói rằng anh ấy sẽ thích nếu bìa được tải xuống từ web và tôi chỉ viết một kịch bản khá ổn cho việc sử dụng đó eye3Dsacad, cả hai đều có thể cài đặt từ pip. eye3Drất hữu ích cho mục đích này vì nó dường như không mã hóa lại âm thanh và sử dụng --to-v2.4cờ xử lý bất kỳ tệp mp3 nào, bất kể loại thẻ id3. Tập lệnh nên được khởi chạy từ thư mục chứa các tệp mp3. Nó có thể được chạy mà không có đối số, đoán tên nghệ sĩ và album từ các thẻ id3 hoặc với tên thủ công làm đối số, ví dụ embedart "pink floyd" "dark side of the moon". Nó được viết cho vỏ cá, nhưng sẽ dễ dàng di chuyển thành bash nếu bạn thay đổi tất cả các lệnh đã đặt thành các giả định biến bash.

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 không hoạt động với Unicode . Nếu bất kỳ ký tự không phải mã ascii nào có trong tên tệp .mp3 (hoặc thậm chí chỉ trong một tên thư mục tổ tiên, chẳng hạn như thư mục Album), thì nó sẽ hủy bỏ. LTA.

Vì vậy, bạn sẽ không gặp may nếu tiêu đề Album hoặc Bài hát không được viết bằng tiếng Anh!

Ví dụ:

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

Rõ ràng eyeD3 muốn đặt đường dẫn đầy đủ của tệp .mp3 bên trong tệp .mp3 và không thể xử lý các ký tự không phải mã ascii.

Không ngoại lệ: codec 'ascii' không thể mã hóa các ký tự ở vị trí 5-16: thứ tự không nằm trong phạm vi (128)
Eyed3: ERROR: 'ascii' codec không thể mã hóa các ký tự ở vị trí 5-16: thứ tự không nằm trong phạm vi (128)
Tìm lại 
... (Bỏ qua dấu vết dài) ...
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.