เพิ่ม cover-album-art เข้าไปในไฟล์ mp3 / ogg จาก command-line ในโหมด batch หรือไม่?


38

ฉันกำลังมองหาซอฟต์แวร์ใน Linux ที่จะเพิ่มปกอัลบั้ม / ลงในไฟล์ที่เลือกในโหมดแบทช์ รูปหน้าปกอัลบั้มเป็น jpg / png ที่เก็บไว้ในคอมพิวเตอร์ของฉัน มันจะยอดเยี่ยมถ้ามันสามารถนำเข้าจากอินเทอร์เน็ต

ปัจจุบันฉันลองทั้ง Rhythmbox และ Banshee แล้ว ฉันได้ลองlameแล้วและeasytagดูเหมือนว่าพวกเขาจะไม่รองรับโหมดแบทช์ lameจะไม่เพิ่มคุณสมบัติ แต่เขียนทับ (ฉันรู้ว่าง่อยเป็นเพียงบรรทัดคำสั่ง s / Wi ได้ใช้เพื่อให้ห่างไกล)

ดังนั้นโดยทั่วไปฉันกำลังมองหา:

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

ที่จะเพิ่มรูปภาพไปยังข้อมูลเมตาของไฟล์อย่างถาวร

คุณสามารถแนะนำซอฟต์แวร์ดังกล่าวให้ฉันได้ไหม

คำตอบ:


24

กะพร่องกะแพร่ง

การใช้lameคุณสามารถทำได้โดยใช้สคริปต์เล็กน้อย:

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

หากไฟล์มีชื่อว่าอะไรเช่นนี้คุณสามารถสร้างเชลล์สคริปต์เพื่อทำสิ่งที่คุณต้องการ:

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

คุณสามารถทำให้ขนาดกะทัดรัดด้านบนเล็กน้อยขึ้นและขจัดความต้องการsedโดยการใช้งานbashโดยการเอาส่วนต่อท้ายที่ตรงกันออก:

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

Picard / MusicBrainz

หากคุณต้องการทำสิ่งนี้ในวงกว้างฉันขอแนะนำให้ใช้ Picard ซึ่งเป็นเครื่องมือส่วนหน้าสำหรับการใช้ฐานข้อมูล MusicBrainz มีปลั๊กอินไปยัง Picard ที่ชื่อว่า "Cover Art Downloader" ซึ่งสามารถทำเช่นนี้กับกลุ่มของคอลเลกชันของคุณ

ข้างต้นไม่ปรากฏว่าเป็นบรรทัดคำสั่งขับเคลื่อน

หัวผักกาด

beetsอีกตัวเลือกหนึ่งที่จะใช้ สิ่งนี้สามารถขับเคลื่อนได้จากบรรทัดคำสั่งและใช้ประโยชน์จากฐานข้อมูล MusicBrainz สำหรับการจัดหาปกอัลบั้ม

คุณสามารถมาปกอัลบั้มโดยใช้FetchArt ปลั๊กอินหรือฝังโดยใช้ปลั๊กอิน EmbedArt

ตัวเลือกอื่น?

ดูคำถามและคำตอบ U&L ก่อนหน้านี้เรื่อง: เครื่องมือแท็ก mp3 สำหรับ Linux . มีเครื่องมือทางเลือกหลายรายการในหัวข้อนี้


คุณสามารถหลีกเลี่ยงการโทรกับสิ่งที่ต้องการsed albart="${i%.mp3}.jpg"ที่สำคัญฉันเพียงแค่การทดสอบคำสั่งง่อยของคุณและมีlame: unrecognized option -i...
evilsoup

@evilsoup - ขอบคุณสวิตช์ไม่มีเส้นประ --ti ..ควรจะเป็น
slm

@evilsoup - sedนอกจากนี้ยังเพิ่มความคิดเห็นเกี่ยวกับการไม่ได้ใช้ ขอบคุณ!
slm

7
@ Exocity-G - ไม่ฉันไม่แนะนำให้ใช้lameเพราะจริงๆแล้วมันเป็นโปรแกรมเปลี่ยนไฟล์ มีเครื่องมืออื่น ๆ สำหรับจัดการแท็ก id3 ของ mp3 คุณสามารถใช้id3v2 -r "APIC" *.mp3หรือeyeD3 --remove-all-images *.mp3ลบภาพที่แนบมาได้
slm

1
FYI รุ่น 3.99 ของฉันไม่มีตัวเลือก "--ti" (เดเบียนบัสเตอร์) - eyeD3 น่าจะเป็นทางเลือกที่ดี
Benjamin Peter

17

ทางออกหนึ่งคือการใช้ ffmpeg:

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

คุณสามารถใส่สิ่งนี้ลงใน for for loop เพื่อทำทุก MP3 ในไดเรกทอรี:

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

สิ่งนี้จะสร้างไฟล์เอาต์พุตแยกต่างหาก (ดังนั้นหากคุณมีไฟล์ชื่อfoo.mp3คุณจะได้ทั้งคู่foo.mp3และout-foo.mp3); นี่เป็นเพราะ ffmpeg ไม่สามารถเขียนทับอินพุต คุณสามารถแก้ไขได้ด้วย:

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

การใช้ ffmpeg สำหรับปัญหานี้เล็กน้อยเหมือนกับการใช้ขีปนาวุธเพื่อล่องเรือ เครื่องมือจัดการเมทาดาทาที่เชี่ยวชาญมากขึ้นอย่างแน่นอนจะสามารถทำได้ในคำสั่งที่สะอาดและสั้นกว่า


6
คำสั่ง ffmpeg ที่แสดงที่นี่จะเข้ารหัสเสียง ถ้าคุณต้องการแปลงจากรูปแบบอื่นที่ดี แต่ถ้าคุณเพียงต้องการที่จะเพิ่มปกไปยัง mp3 ที่มีอยู่โดยไม่ต้องเข้ารหัสมันเพิ่มหลังจากที่-acodec copy -map 1
jsd

มันใช้งานไม่ได้สำหรับฉันมีเหตุผลพิเศษไหม? ฉันได้รับไฟล์ MP3 เท่านั้น แต่ไม่มีภาพขนาดย่อ @jsd
เชฟฟาโรห์

ขออภัย @ChefPharaoh ฉันไม่รู้ว่าทำไมมันไม่ทำงานสำหรับคุณ ฉันเพิ่งลองทำ wav-> mp3 ขณะที่เพิ่มงานศิลปะและเพียงเพิ่มงานศิลปะลงใน mp3 ที่มีอยู่ด้วยคำสั่ง ffmpeg ที่แสดงด้านบน ทั้งสองครั้งมันทำงานได้ดี
jsd

@evilsoup ฉันไม่แน่ใจว่าฉันกำลังทำบางสิ่งที่เลวร้ายยิ่งหรือผิด แต่ฉันสามารถแก้ไขไฟล์ mp3 ของฉันได้โดยใช้การทดแทนกระบวนการ คินดาทำให้สคริปต์นี้ง่ายขึ้นและดูเหมือนจะเร็วสุด
rien333

ทำงานเหมือนการรักษาและฉันยังพบ ffmpeg เพื่อจะเล็กน้อยเร็วกว่าง่อย :)
Tina


5

คุณสามารถใช้FancyAudio gem ได้ มันสามารถเพิ่มปกอัลบั้มในไฟล์ MP3 เอกสารสามารถใช้ได้ที่นี่

คุณสมบัติ

  1. เพิ่มรูปหน้าปกอัลบั้มเป็นไฟล์ MP3 เดี่ยว
  2. เพิ่มปกอัลบั้มในไฟล์ MP3 หลายไฟล์

ภาพหน้าจอด้านล่างแสดงผลลัพธ์ของ fancy_audio เมื่อทำงานในโฟลเดอร์ที่มีภาพและไฟล์ mp3 หลายไฟล์

ป้อนคำอธิบายรูปภาพที่นี่

ภาพหน้าจอด้านล่างแสดงผลลัพธ์ของ fancy_audio เมื่อทำงานในโฟลเดอร์ที่มีไฟล์ mp3 และไฟล์รูปภาพ

ภาพนี้แสดงเอาท์พุทของ fancy_audio เมื่อทำงานในโฟลเดอร์ที่มีไฟล์ MP3 และไฟล์รูปภาพ


นี่เป็นเรื่องง่ายและทำงานได้เร็วกว่าlameเมื่อเพิ่มภาพเดียวกันไปยังไฟล์ MP3 หลายไฟล์ คุณไม่จำเป็นต้องรู้ Ruby;) - นี่เป็นสคริปต์แบบสแตนด์อโลน
Tomasz Gandor

0

OP ระบุว่าเขาจะชอบถ้าหน้าปกถูกดาวน์โหลดจากเว็บและฉันเพิ่งเขียนสคริปต์ที่ใช้ได้สำหรับการใช้งานeye3Dและสามารถsacadติดตั้งได้จาก pip eye3Dมีประโยชน์มากสำหรับวัตถุประสงค์นี้เนื่องจากดูเหมือนจะไม่เข้ารหัสเสียงอีกครั้งและการใช้--to-v2.4ค่าสถานะจะจัดการกับไฟล์ MP3 ใด ๆ ไม่ว่าจะเป็นแท็ก id3 ประเภทใดก็ตาม ควรเปิดใช้งานสคริปต์จากไดเรกทอรีที่มีไฟล์ mp3 มันสามารถทำงานกับการขัดแย้งใดคาดเดาศิลปินและอัลบั้มชื่อจากแท็ก ID3 embedart "pink floyd" "dark side of the moon"หรือที่มีชื่อคู่มือเป็นข้อโต้แย้งเช่น มันเขียนไว้สำหรับตู้ปลา แต่ควรพกพาไปทุบตีได้ง่ายถ้าคุณเปลี่ยนคำสั่ง set ทั้งหมดเป็นชุดคำสั่งตัวแปร 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 ไม่ได้ทำงานกับ Unicode หากอักขระที่ไม่ใช่ ASCII อยู่ในชื่อไฟล์. mp3 (หรือแม้แต่ในชื่อไดเรกทอรีบรรพบุรุษเช่นไดเรกทอรีอัลบั้ม) ก็จะยกเลิก LTA

ดังนั้นคุณจะโชคดีถ้าชื่ออัลบั้มหรือเพลงไม่ได้เขียนเป็นภาษาอังกฤษ!

ตัวอย่างเช่น:

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

เห็นได้ชัดว่า eyeD3 ต้องการใส่เส้นทางแบบเต็มของไฟล์. mp3 ในไฟล์. mp3 และไม่สามารถจัดการกับอักขระที่ไม่ใช่ ASCII ได้

ข้อยกเว้นที่ไม่ได้บันทึก: ตัวแปลงสัญญาณ 'ascii' ไม่สามารถเข้ารหัสอักขระในตำแหน่งที่ 5-16: ลำดับไม่อยู่ในช่วง (128)
eyed3: ข้อผิดพลาด: ตัวแปลงสัญญาณ 'ascii' ไม่สามารถเข้ารหัสอักขระในตำแหน่งที่ 5-16: ลำดับไม่อยู่ในช่วง (128)
ตรวจสอบย้อนกลับ 
... (ละเว้นการติดตามย้อนกลับยาว) ...
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.