ฉันจะแปลง. flac เป็น. mp3ด้วย ffmpeg โดยเก็บข้อมูลเมตาทั้งหมดไว้ได้อย่างไร (นั่นคือการแปลงความคิดเห็นของ Vorbis ในไฟล์. flac เป็น ID3v2 metadata ของ. mp3)
ฉันจะแปลง. flac เป็น. mp3ด้วย ffmpeg โดยเก็บข้อมูลเมตาทั้งหมดไว้ได้อย่างไร (นั่นคือการแปลงความคิดเห็นของ Vorbis ในไฟล์. flac เป็น ID3v2 metadata ของ. mp3)
คำตอบ:
คำสั่งต่อไปนี้จะรักษาคุณภาพสูงไว้ที่. mp3 (320 kbps) และข้อมูลเมตาจากไฟล์. flac จะถูกแปลงเป็นรูปแบบ ID3v2 ซึ่งสามารถรวมอยู่ในไฟล์. mp3:
ffmpeg -i input.flac -ab 320k -map_metadata 0 -id3v2_version 3 output.mp3
ffmpeg
3.2 คัดลอกข้อมูลเมตาไปยัง ID3v2 จาก FLAC โดยอัตโนมัติโดยไม่จำเป็นต้องระบุ-map_metadata 0 -id3v2_version 3
แม้ว่าจะไม่คัดลอกลงในแท็ก ID3v1 ฉันใช้เครื่องมือแยกต่างหากสำหรับสิ่งนั้น
คำตอบที่สมบูรณ์แบบข้างต้น ฉันใช้มันร่วมกับ find เพื่อเพิ่มไฟล์ FLAC ทั้งหมดในทรีย่อยไปยัง iTunes ด้วยคำสั่งนี้
find . -name "*.flac" -exec ffmpeg -i {} -ab 160k -map_metadata 0 -id3v2_version 3 {}.mp3 \;
หากต้องการเพิ่มไฟล์ที่เป็นผลลัพธ์ลงใน iTunes โดยอัตโนมัติให้รับไดเรกทอรีนำเข้า iTunes ด้วย
find ~/Music/ -name "Automatically Add*"
ผลลัพธ์เช่น
/Users/sir/Music//iTunes/iTunes Media/Automatically Add to iTunes.localized
จากนั้นเรียกใช้เช่น
find . -name "*.mp3" -exec mv {} "/Users/sir/Music//iTunes/iTunes Media/Automatically Add to iTunes.localized/" \;
เพื่อเพิ่มแทร็กที่แปลงแล้วทั้งหมดลงใน iTunes โดยอัตโนมัติ
หากคุณต้องการประหยัดพื้นที่เล็กน้อยลองใช้คำแนะนำของhydrogenaud.io :
ที่มีคุณภาพสูงมาก: ไฮไฟ, บ้านหรือฟังเงียบ, ที่มีขนาดไฟล์ที่ดีที่สุด
-V0 (~245 kbps)
,-V1 (~225 kbps)
,-V2 (~190 kbps)
หรือ-V3 (~175 kbps)
มีการแนะนำ โดยปกติการตั้งค่า VBR เหล่านี้จะให้ผลลัพธ์ที่โปร่งใส ความแตกต่างของเสียงระหว่างค่าที่ตั้งล่วงหน้าเหล่านี้อาจมีอยู่ แต่หาได้ยาก
ที่มา: http://wiki.hydrogenaud.io/index.php?title=LAME
หากคุณต้องการใช้ตัวเลือกนี้ใน ffmpeg คุณควรใช้-q:a 0
นามแฝง
ควบคุมคุณภาพด้วย
-qscale:a
(หรือนามแฝง-q:a
) ค่าเป็นตัวเข้ารหัสเฉพาะดังนั้นสำหรับ libmp3lame ช่วงคือ 0-9 โดยที่ค่าที่ต่ำกว่าคือคุณภาพที่สูงกว่า โดยปกติ 0-3 จะให้ผลลัพธ์ที่โปร่งใส 4 (ค่าเริ่มต้น) ควรใกล้เคียงกับความโปร่งใสในการรับรู้และ 6 สร้างคุณภาพที่ "ยอมรับได้" อ็อพชัน-qscale:a
ถูกแมปกับ-V
อ็อพชันในเครื่องมืออินเตอร์เฟสบรรทัดคำสั่งแบบสแตนด์อโลน
ที่มา: https://trac.ffmpeg.org/wiki/Encode/MP3
หากคุณต้องการเมตาแท็ก ID3v1 ด้วยคุณควรเพิ่ม-write_id3v1 1
พารามิเตอร์
ดังนั้นคำสั่งสุดท้ายของฉันคือ:
ffmpeg.exe -y -i input.flac -codec:a libmp3lame -q:a 0 -map_metadata 0 -id3v2_version 3 -write_id3v1 1 output.mp3
ฉันกำลังทดสอบคำสั่งต่อไปนี้เพื่อแปลงinfile.flac
ไฟล์เป็นoutfile.mp3
:
ffmpeg -i infile.flac -q:a 0 outfile.mp3
สำหรับ Ubuntu 16.04 คำสั่งด้านบนดูเหมือนจะคัดลอกข้อมูลเมตา (ส่วนใหญ่ทั้งหมด?)
-q:a 0
บอก ffmpeg
ให้ใช้ VBR คุณภาพสูงสุด
อย่างไรก็ตามffmpeg
กำลังแปลงปกอัลบั้มของฉันจากjpeg
เป็นpng
ซึ่งทำให้ขนาดของหน้าปกเพิ่มขึ้น
Stream mapping:
Stream #0:1 -> #0:0 (mjpeg (native) -> png (native))
Stream #0:0 -> #0:1 (flac (native) -> mp3 (libmp3lame))
(ฉันเดาว่าประเภทการแปลงด้านบนนั้นสมเหตุสมผลเมื่อพิจารณาถึงวิธีการffmpeg
ทำงาน )
หลังจากการขุดฉันพบ-c:v copy
ตัวเลือกซึ่งระบุว่าควรคัดลอกสตรีมวิดีโอแทนที่จะแปลงรหัส คำสั่งเต็มคือ:
ffmpeg -i infile.flac -c:v copy -q:a 0 outfile.mp3
คำสั่งดังกล่าวส่งผลให้:
Stream mapping:
Stream #0:1 -> #0:0 (copy)
Stream #0:0 -> #0:1 (flac (native) -> mp3 (libmp3lame))
ในการแปลงไฟล์ flac ทั้งหมดในโฟลเดอร์ที่ซ้อนกันแบบวนซ้ำฉันใช้คำสั่งนี้:
find '~/Music/' -iname '*.flac' -exec bash -c 'D=$(dirname "{}"); B=$(basename "{}"); mkdir "$D/mp3/"; ffmpeg -i "{}" -ab 320k -map_metadata 0 -id3v2_version 3 -acodec libmp3lame "$D/mp3/${B%.*}.mp3"' \;
มันจะสร้างโฟลเดอร์ชื่อ "mp3" ภายในโฟลเดอร์ที่มีไฟล์ flac และภายในโฟลเดอร์ mp3 จะบันทึกไฟล์ mp3 ที่สัมพันธ์กันด้วยบิตเรต 320kbps โดยไม่ต้องเก็บนามสกุลไฟล์เก่าไว้ในชื่อ
$file
"$file"
:r
น่าจะเป็นตัวปรับแต่งที่ไม่ได้ทำงานในzsh
bash
ใน Bash คุณสามารถแทนที่"${file:r}.mp3"
ด้วย"${file%.flac}.mp3"
.
${file%.*}
ฉันรู้ว่าสิ่งนี้ไม่ได้ถูกถาม แต่เมื่อพิจารณาถึงสาเหตุหนึ่งที่ทำให้สิ่งนี้เสร็จสิ้น (อย่างน้อยก็คือสิ่งที่ฉันต้องการจะทำ) คือเพื่อให้สามารถนำเข้าเพลงไปยัง Apple iTunes ซึ่งไม่รองรับ FLAC ในกรณีเช่นนี้การแปลง FLAC เป็นรูปแบบ lossless ของ Apple เอง m4a จึงเหมาะสมกว่า ฉันใช้คำสั่งนี้เพื่อแปลงไฟล์ทั้งหมดในโฟลเดอร์ปัจจุบันในขณะที่ยังคงขนาดไฟล์ที่ใกล้เคียงกัน
find . -name "*.flac" -exec ffmpeg -i {} -map_metadata 0 -acodec alac {}.m4a \;
สคริปต์flac2mp3.shนี้ใช้ffmpeg
ในการแปลงแผนผังโฟลเดอร์ของไฟล์ FLAC เป็นโครงสร้างโฟลเดอร์อื่นของไฟล์ MP3 รวมภาพหน้าปกเมื่อปัจจุบัน คุณสามารถตั้งค่าCORES
ตัวแปรเพื่อสร้างงานพื้นหลังเพื่อแปลงไฟล์ครั้งละหลาย ๆ ไฟล์
ffmpeg
คำถามการใช้งาน CLI ที่Super User Stack Overflowใช้สำหรับคำถามเกี่ยวกับการเขียนโปรแกรมเท่านั้น นอกจากนี้ FLAC ยังสนับสนุนความคิดเห็นของ Vorbis อย่างเป็นทางการเท่านั้นดังนั้นฉันคิดว่าคุณต้องการแปลงเป็น ID3v2 แทนที่จะเป็น "keep"