FFMPEG: แปลงไฟล์ m4a เป็น mp3 โดยไม่สูญเสียข้อมูล / คุณภาพอย่างมีนัยสำคัญ บิตเรตอัตโนมัติ


44

ฉันมีไฟล์เสียง (ประมาณ 1,000 ไฟล์) ที่ฉันต้องการแปลงจาก m4a เป็น mp3 เพื่อให้ฉันสามารถใช้เล่นกับเครื่องเล่นซีดีที่มีพอร์ต USB

ฉันพยายามทำสิ่งที่ง่ายเช่น: ffmpeg -i FILE.m4a FILE.mp3แต่ดูเหมือนว่าจะลดบิตเรตเป็นค่าที่ต่ำมากซึ่งไม่ใช่สิ่งที่ฉันต้องการ

ในทำนองเดียวกันฉันไม่ต้องการแปลงโดยใช้อัตราบิตคงที่เช่น 320k เนื่องจากไฟล์บางไฟล์ที่ฉันแปลงเป็น 320k m4a และบางไฟล์มีคุณภาพต่ำเท่ากับ 96k m4a

ดูเหมือนว่าไม่มีเหตุผลที่จะบังคับให้ 320k เนื่องจากไฟล์บางไฟล์จะมีขนาดใหญ่กว่าที่พวกเขาต้องการหลายเท่า ในทำนองเดียวกันมันไม่มีเหตุผลที่จะทำลายไฟล์ 320k ทั้งหมดของฉันโดยการแปลงให้เป็นไฟล์ที่ต่ำกว่า 96k มาก (ในขณะนี้ไฟล์จะถูกแปลงเป็นประมาณ 50k)

ไม่มีใครรู้ว่าฉันสามารถทำสิ่งนี้ได้อย่างไร สิ่งที่ฉันต้องการจะทำคือบอกให้ ffmpeg แปลงไฟล์ m4a ทั้งหมดในไดเรกทอรีเป็น mp3 ในขณะที่ยังคงรักษาคุณภาพเสียงในปัจจุบันให้ดีที่สุดเท่าที่จะทำได้ (แน่นอนว่ามีแนวโน้มที่จะมีการสูญเสียพิเศษบางอย่างจากการแปลงจากการสูญเสียเป็นรูปแบบไฟล์ที่สูญเสียไป)

ขอบคุณสำหรับความช่วยเหลือของคุณ. หากไม่สามารถทำได้มีสคริปต์บางประเภทที่อาจตรวจจับคุณภาพที่ต้องการเนื่องจากแปลงไฟล์ทีละไฟล์หรือไม่

PS: ฉันกำลังทำงานกับ intel mac แต่ยังมีกล่อง Ubuntu

คำตอบ:


51

VBR

คุณสามารถใช้-qscale:aตัวเลือกในffmpegการสร้างเอาท์พุทตัวแปรบิตเรต (VBR) MP3 จากFFmpeg Wiki: การเข้ารหัสเสียง MP3 VBR (อัตราบิตผันแปร) :

ควบคุมคุณภาพด้วย-qscale:a(หรือนามแฝง-q:a) ค่าเป็นตัวเข้ารหัสเฉพาะดังนั้นสำหรับ libmp3lame ช่วงคือ 0-9 โดยที่ค่าที่ต่ำกว่าคือคุณภาพที่สูงขึ้น โดยปกติแล้ว 0-3 จะให้ผลลัพธ์ที่โปร่งใส 4 (ค่าเริ่มต้น) ควรใกล้เคียงกับการรับรู้ที่โปร่งใสและ 6 มักจะสร้างคุณภาพที่ "ยอมรับ" ตัวเลือก-qscale:aถูกแมปกับ-Vตัวเลือกในเครื่องมืออินเตอร์เฟสบรรทัดคำสั่ง lame แบบสแตนด์อะโลน

คุณจะต้องทดสอบเพื่อดูว่าค่าใดที่ยอมรับได้สำหรับคุณ ยังเห็นไฮโดรเจนเสียง: แนะนำการตั้งค่า

การเข้ารหัสหลายไฟล์

คุณสามารถใช้ Bash "for loop" เพื่อเข้ารหัสไฟล์ทั้งหมดในไดเรกทอรี:

$ mkdir newfiles
$ for f in *.m4a; do ffmpeg -i "$f" -codec:v copy -codec:a libmp3lame -q:a 2 newfiles/"${f%.m4a}.mp3"; done

ได้รับ ffmpeg

ขอแนะนำให้ใช้บิลด์ล่าสุดของffmpegถ้าเป็นไปได้ ดูหน้าดาวน์โหลด FFmpegเพื่อดูลิงค์สำหรับงานสร้างสำหรับ OS X, Linux และ Windows นอกจากนี้คุณยังสามารถทำตามคำแนะนำในการรวบรวม FFmpeg


1
โอเคขอบคุณคำสั่งใช้งานได้ แต่ฉันไม่คิดว่ามันจะทำในสิ่งที่ฉันต้องการ ฉันได้ตั้งค่า -q: a 0 ซึ่งกำลังทำสิ่งที่ฉันคาดไว้สำหรับ m4a ที่มีคุณภาพสูงกว่า (ผลิตไฟล์ขนาดใหญ่ที่มีอัตรา vbr สูงกว่า) แต่ไฟล์คุณภาพต่ำกว่าฉันคิดว่ายังคงถูกแปลงเป็นไฟล์ขนาดใหญ่ด้วย vbr's ประมาณ 250-260 กิโลไบต์ / วินาที ฉันคาดหวังว่าไฟล์ที่มีขนาดประมาณ 96k ในรูปแบบ m4a จะถูกแปลงเป็นบิตเรตที่คล้ายกันกับ lame encoder ในโหมด vbr ฉันสมมติว่าฉันยังไม่เข้าใจว่าโหมดการเข้ารหัส vbr ทำงานอย่างไร
user3728501

19

ใช้FFmpeg (มี GUI หลายรุ่นด้วย)

  1. MP3หยุดใช้งานแล้ว (ในปี 2560) ตัวแปลงสัญญาณที่ล้าสมัย อินเทอร์เน็ตได้เปลี่ยนเป็นAAC (ตัวแปลงสัญญาณที่มีประสิทธิภาพและคุณภาพมากกว่า):

    ffmpeg -i filenameee.m4a -acodec copy output.aac
    
  2. อย่างไรก็ตามหากคุณยังต้องการใช้MP3 (เนื่องจากยังรองรับอุปกรณ์เพิ่มเติมอยู่):

    ffmpeg -i filenameee.m4a -acodec libmp3lame -ab 256k output.mp3
    

4
เนื่องจากคำถามเกี่ยวกับคุณภาพอาจจะเป็นประโยชน์ถ้าแปลงเป็น 256k แทน 128
VessoVit


1

ใช้คำตอบที่มีอยู่เป็นพื้นฐานฉันเขียนสคริปต์ทุบตีซึ่งควรทำสิ่งที่คำถามถามในเครื่อง Ubuntu (ทดสอบบน 16.04) คุณจะต้องติดตั้งavprobeซึ่งอยู่ในlibav-toolsแพ็คเกจ คุณสามารถติดตั้งavprobeโดยใช้คำสั่งต่อไปนี้

sudo apt-get install libav-tools

หมายเหตุ: คุณควรทำการสำรองข้อมูลของโฟลเดอร์ใด ๆ ที่คุณเรียกใช้สคริปต์นี้รวมทั้งพยายามอย่างเต็มที่ในการอ่านและทำความเข้าใจกับสิ่งที่ทำก่อนที่จะรัน

ฉันไม่ได้ทดสอบอย่างจริงจังดังนั้น YMMV

#!/bin/bash

mkdir "mp3s"
for f in *.m4a;
do
    bitrate=$(avprobe "${f}" 2> >(grep bitrate) | sed 's/^.*bitrate://g' | sed 's/[^0-9]*//g')
    bitrate="${bitrate}K"
    new_filename=$(echo "${f}" | sed 's/.m4a$/.mp3/g')
    ffmpeg -y -i "${f}" -acodec libmp3lame -ab "${bitrate}" "mp3s/${new_filename}"
done

0

หากคุณทำงานที่ 48 กิโลเฮิร์ตซ์และอย่างน้อย 24 บิตในไฟล์อินพุต (จากตัวแก้ไขไฟล์ i.ex. ) -q:a 0จะทำซ้ำ 20 kHz ที่ไม่มีไฟล์ขนาดใหญ่มากเป็น flac ... แต่เสียงคุณภาพต่ำเว้นแต่คุณลดเสียงรบกวน จากความถี่สูง (เสียงฟู่) โดยเครื่องมือแก้ไขเสียงลดเสียงหรือจมูกลดเสียงที่สร้างขึ้นในการแปลงที่จะทำซ้ำจากนั้นจะใช้ไฟล์ข้อมูลเป็น HF ที่ได้ยินเสียงไม่ได้ แต่มีราคาแพง

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