แปลง. flac เป็น. mp3 ด้วย ffmpeg โดยเก็บข้อมูลเมตาทั้งหมด


89

ฉันจะแปลง. flac เป็น. mp3ด้วย ffmpeg โดยเก็บข้อมูลเมตาทั้งหมดไว้ได้อย่างไร (นั่นคือการแปลงความคิดเห็นของ Vorbis ในไฟล์. flac เป็น ID3v2 metadata ของ. mp3)


5
โปรดทราบว่าสำหรับครั้งต่อไปที่คุณควรถามffmpegคำถามการใช้งาน CLI ที่Super User Stack Overflowใช้สำหรับคำถามเกี่ยวกับการเขียนโปรแกรมเท่านั้น นอกจากนี้ FLAC ยังสนับสนุนความคิดเห็นของ Vorbis อย่างเป็นทางการเท่านั้นดังนั้นฉันคิดว่าคุณต้องการแปลงเป็น ID3v2 แทนที่จะเป็น "keep"
llogan

โอเคฉันแก้ไขคำถามแล้ว ฉันถามที่นี่เพราะฉันเห็นคำถามเช่นนี้ใน StackOverflow (เช่นนี้หรือสิ่งนี้ ) และคิดว่าการแบ่งปันความรู้ของฉันน่าสนใจ นอกจากนี้ฉันเห็นว่ามีแท็ก ffmpegดังนั้นทำไมไม่แชร์วิธีแก้ปัญหาของฉันที่นี่ ffmpeg ถูกใช้ในแอปพลิเคชั่นจำนวนมากโดยนักพัฒนาจำนวนมาก
Vito Gentile

4
ffmpegแท็กกล่าวว่า "มีคำถามเกี่ยวกับการใช้งานแบบโต้ตอบของเครื่องมือบรรทัดคำสั่ง FFmpeg ควรจะถามเกี่ยวกับ Super User." ไม่ใช่เรื่องใหญ่ แต่ฉันแค่อยากจะชี้ให้เห็นเนื่องจากมีคำถามนอกประเด็นมากเกินไปในความคิดของฉัน
llogan

คำตอบ:


156

คำสั่งต่อไปนี้จะรักษาคุณภาพสูงไว้ที่. mp3 (320 kbps) และข้อมูลเมตาจากไฟล์. flac จะถูกแปลงเป็นรูปแบบ ID3v2 ซึ่งสามารถรวมอยู่ในไฟล์. mp3:

ffmpeg -i input.flac -ab 320k -map_metadata 0 -id3v2_version 3 output.mp3

1
เป็นที่น่าสังเกตว่า "ffmpeg" อาจต้องถูกแทนที่ด้วย "avconv"
shockburner

6
FWIW ffmpeg3.2 คัดลอกข้อมูลเมตาไปยัง ID3v2 จาก FLAC โดยอัตโนมัติโดยไม่จำเป็นต้องระบุ-map_metadata 0 -id3v2_version 3แม้ว่าจะไม่คัดลอกลงในแท็ก ID3v1 ฉันใช้เครื่องมือแยกต่างหากสำหรับสิ่งนั้น
Dai

1
เนื้อเพลงยังไม่ได้รับการคัดลอก
user151496

1
มันแบ่ง flac หรือไม่ถ้ามีหลายส่วน?
Artyom

1
@Artyom คุณควรจะมีไฟล์คิวพร้อมกับflacของคุณที่มีการทำเครื่องหมายจุดแยก ถ้าเป็นเช่นนั้นคุณสามารถใช้shnsplit (คอนโซล) หรือflacon (GUI) เพื่อแยกไฟล์ของคุณและแปลงส่วนต่างๆเป็น mp3 หากคุณมีเพียงflacเดียวคุณสามารถเขียนcuiสำหรับมันหรือใช้ตัวเลือก-ssและ-tของ ffmpeg เพื่อตัดแต่ละเพลงออก

58

คำตอบที่สมบูรณ์แบบข้างต้น ฉันใช้มันร่วมกับ 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 โดยอัตโนมัติ


3
" / ผู้ใช้ / ครับ ", lmao.
Harry Svensson

เกร็ดเล็กเกร็ดน้อย: ผู้ใช้ทุกคนใน บริษัท ของเรามีชื่อดาราโดยย่อได้ 3-5 ตัวอักษร Mine is "sirius", short sir;)
user2707001

ตัวเลือกที่ไม่รู้จัก "ชื่อ"
MonsterMMORPG

14

หากคุณต้องการประหยัดพื้นที่เล็กน้อยลองใช้คำแนะนำของ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

8

ฉันกำลังทดสอบคำสั่งต่อไปนี้เพื่อแปลง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))

3

ในการแปลงไฟล์ 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 โดยไม่ต้องเก็บนามสกุลไฟล์เก่าไว้ในชื่อ


3

One-Liner เพื่อแปลง.flacไฟล์ทั้งหมด.mp3ในไดเร็กทอรีเดียวโดยเก็บข้อมูลเมตาส่วนใหญ่ไว้ :

for file in *.flac; do ffmpeg -i $file -q:a 0 ${file:r}.mp3; done

(หมายเหตุ: ${file:r}ลบส่วนขยายของเส้นทางไฟล์ที่กำหนด)

ffmpeg: flac เป็น mp3


เพียงแค่พูดตัวแปรเช่น$file "$file"
Chazy Chaz

:rน่าจะเป็นตัวปรับแต่งที่ไม่ได้ทำงานในzsh bashใน Bash คุณสามารถแทนที่"${file:r}.mp3"ด้วย"${file%.flac}.mp3".
mivk

เพื่อแสดงเฉพาะชื่อไฟล์จากไฟล์โดยใช้ bash${file%.*}
Evhz

2

ฉันรู้ว่าสิ่งนี้ไม่ได้ถูกถาม แต่เมื่อพิจารณาถึงสาเหตุหนึ่งที่ทำให้สิ่งนี้เสร็จสิ้น (อย่างน้อยก็คือสิ่งที่ฉันต้องการจะทำ) คือเพื่อให้สามารถนำเข้าเพลงไปยัง Apple iTunes ซึ่งไม่รองรับ FLAC ในกรณีเช่นนี้การแปลง FLAC เป็นรูปแบบ lossless ของ Apple เอง m4a จึงเหมาะสมกว่า ฉันใช้คำสั่งนี้เพื่อแปลงไฟล์ทั้งหมดในโฟลเดอร์ปัจจุบันในขณะที่ยังคงขนาดไฟล์ที่ใกล้เคียงกัน

find . -name "*.flac" -exec ffmpeg -i {} -map_metadata 0 -acodec alac {}.m4a \;


ตัวเลือกที่ไม่รู้จัก "ชื่อ" เกิดข้อผิดพลาดในการแยกรายการอาร์กิวเมนต์: ไม่พบตัวเลือก
MonsterMMORPG

@MonsterMMORPG คุณอาจพลาดพิมพ์ไฟล์. หลังจากคำสั่ง find . บอกให้ค้นหาในโฟลเดอร์ปัจจุบันและ - ชื่อบอกให้ค้นหาชื่อไฟล์ที่ตรงกัน
Dhiraj Gupta

2

สคริปต์flac2mp3.shนี้ใช้ffmpegในการแปลงแผนผังโฟลเดอร์ของไฟล์ FLAC เป็นโครงสร้างโฟลเดอร์อื่นของไฟล์ MP3 รวมภาพหน้าปกเมื่อปัจจุบัน คุณสามารถตั้งค่าCORESตัวแปรเพื่อสร้างงานพื้นหลังเพื่อแปลงไฟล์ครั้งละหลาย ๆ ไฟล์


ให้ข้อผิดพลาด sed: -e expression # 1, char 26: unterminated `s 'command
MonsterMMORPG

สิ่งที่ฉันกำลังมองหาขอบคุณ! ฉันปรับสคริปต์เล็กน้อยเพื่อรวม VBR และคำตอบอื่น ๆ อัปโหลดที่นี่: gist
aksh1618
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.