คำสั่ง FFmpeg เพื่อแปลง MP3 เป็น AAC


21

ฉันสามารถออกคำสั่งนี้:

ffmpeg -i input.mp3 -acodec alac -ab 128k -ar 48000 -ac 2 -y output.m4a 

เพื่อสร้างไฟล์ m4a

แต่เมื่อฉันออกคำสั่งนี้

ffmpeg -i input.mp3 -acodec alac -ab 128k -ar 48000 -ac 2 -y output.aac

ffmpeg กำลังโยนข้อผิดพลาดที่บอกว่า

ไม่สามารถเขียนส่วนหัวสำหรับไฟล์เอาต์พุต # 0 (พารามิเตอร์ตัวแปลงสัญญาณไม่ถูกต้อง?)

นอกจากนี้ขนาดของไฟล์ m4a นั้นใหญ่กว่าไฟล์ต้นฉบับเกือบ 5.8 เท่าซึ่งไม่ใช่สิ่งที่ฉันต้องการอย่างแท้จริงและทำไมฉันถึงต้องการแปลงเป็น AAC

คำตอบ:


38

ฉันจะแปลงเป็น AAC ได้อย่างไร

นี่คือคำสั่ง FFmpeg พื้นฐานที่สุดในการแปลงอินพุตเป็นเสียง AAC โดยใช้คุณภาพสูงสุด AAC FFmpeg libfdk_aacเป็นตัวเข้ารหัส Fraunhofer AAC และจะสามารถใช้ได้เมื่อคุณรวบรวม FFmpeg ด้วยการสนับสนุน

ffmpeg -i input.mp3 -c:a libfdk_aac output.m4a

ในการเปลี่ยนคุณภาพคุณมีสองทางเลือกดังนี้

  • สำหรับตัวแปรบิตเรต (VBR) ให้ใช้-vbrตัวเลือก ตัวอย่างเช่น-vbr 4เป็นตัวเลือกที่ดี (ประมาณ 128 kBit / s สำหรับเสียงสเตอริโอ) สูงกว่าหมายถึงดีกว่า ค่ามีตั้งแต่ 1 ถึง 5

    ffmpeg -i input.mp3 -c:a libfdk_aac -vbr 4 output.m4a
    
  • สำหรับอัตราบิตคงที่ (CBR) ให้ใช้ตัวเลือกเช่น-b:a -b:a 128k128 kBit / s ควรจะดีพอสำหรับสถานการณ์ส่วนใหญ่ คุณสามารถเลือกบางสิ่งบางอย่างที่ต่ำกว่าเช่นกัน

    ffmpeg -i input.mp3 -c:a libfdk_aac -b:a 128k output.m4a
    

คุณยังสามารถใช้ HE-AAC (v1 / v2) แทนโปรไฟล์ AAC-LC เริ่มต้น (ความซับซ้อนต่ำ) ซึ่งเหมาะที่สุดสำหรับบิตเรตต่ำ:

ffmpeg -i input.mp3 -c:a libfdk_aac -profile:a aac_he_v2 -b:a 32k output.m4a

เกิดอะไรขึ้นถ้าฉันไม่ได้libfdk_aac?

FFmpeg บางรุ่นไม่มีlibfdk_aac(สำหรับเหตุผลด้านลิขสิทธิ์) หากเป็นเช่นนั้นคุณสามารถใช้ตัวเข้ารหัส AAC ในตัวได้:

ffmpeg -i input.mp3 -c:a aac -b:a 192k output.m4a

เครื่องเข้ารหัสนี้ไม่รองรับ VBR อย่างถูกต้องดังนั้นหากคุณต้องการหรือ HE-AAC ให้อ่าน

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


มีปัญหาบางอย่างกับวิธีการดั้งเดิมของคุณ:

  • alacไม่ใช่ AAC ALAC เป็นแอปเปิ้ล Lossless แปลงสัญญาณเสียงในขณะที่ AAC เป็นเสียงขั้นสูงการเข้ารหัส

  • นั่นเป็นสาเหตุที่ว่าทำไมเอาต์พุตของคุณมีขนาดใหญ่กว่าอินพุทเพราะตรงกันข้ามกับ MP3, ALAC ยังคงถูกบีบอัด แต่มันจะต้องไม่มีการสูญเสีย - นั่นคือสาเหตุที่มันจำเป็นต้องเก็บข้อมูลเพิ่มเติม

  • .aacไม่ใช่คอนเทนเนอร์เอาต์พุตสำหรับเสียง ALAC ถ้าคุณใช้ AAC นั่นควรจะได้ผล ฉันจะใช้ MP4 หรือ M4A แม้ว่า


ใน Ubuntu 12.04 ฉันไม่สามารถใช้ตัวเลือก-c:aนี้มีคำพ้องความหมายหรือไม่? ฉันเดาว่ามันอาจหมายถึง-acodec:aแต่ในที่สุดฉันก็ทิ้งมันไว้และffmpegสามารถอนุมานตัวแปลงสัญญาณตามชื่อไฟล์เอาต์พุตที่ต้องการ (ต้องการ-strict experimentalและโยนเข้าไปใน-map_metadata 0:0มาตรการที่ดีเพื่อรักษาแท็ก ID3)
tripleee

นอกจากนี้ยังมีข้อควรระวัง: ฉันต้องการไฟล์ M4B (หนังสือเสียง) ซึ่งffmpegไม่สนับสนุน แต่แปลงเป็น M4A แล้วเพียงแค่เปลี่ยนชื่อดูเหมือนจะใช้งานได้
สามคน

@tripleee นั่นหมายความว่าคุณกำลังใช้โปรแกรมที่ล้าสมัยที่เรียกว่าffmpegแต่มันไม่ได้มาจาก FFmpeg แต่เป็น Libav fork อูบุนตูโชคไม่ดีที่รวมมันแทนที่จะเป็น ffmpeg "ของจริง" ดู: ใครสามารถบอกความแตกต่างและความสัมพันธ์ระหว่าง ffmpeg, libav และ avconv ได้
slhck

@slhck: ขอบคุณสำหรับการอัปเดตและลิงก์ด่วน!
tripleee

1
@tripleee จริง ๆ แล้วไฟล์. m4a นั้นเหมือนกับ. mp4 (เป็นเพียงการตั้งชื่อแบบแผนสำหรับไฟล์ mp4 ที่มีเฉพาะเสียง) แต่มีรูปแบบที่แตกต่างจาก. aac (ซึ่งรู้จักกันในชื่อ ADTS สตรีม) นอกจากนี้คุณยังสามารถบังคับ FFmpeg การส่งออกในรูปแบบ ADTS -f adtsโดยการเพิ่ม
Bigue Nique

4

ง่ายต่อการแปลงเป็น AAC สำหรับ Zeranoe Windows Builds

ffmpeg -i input.mp3 -c:a aac -b:a 128k output.m4a

ใช้ "aac" แทน libfaac หรือ libfdk_aac: https://trac.ffmpeg.org/wiki/Encode/AAC

"FFmpeg สามารถรองรับตัวเข้ารหัส AAC-LC สามตัว (aac, libfaac, libfdk_aac) และตัวเข้ารหัส HE-AAC (v1 / 2) หนึ่งตัว (libfdk_aac) ใบอนุญาตของ libfaac และ libfdk_aac นั้นเข้ากันไม่ได้กับ GPL ดังนั้น GPL จึงไม่อนุญาตให้ใช้กับ GPL ดังนั้น GPL จึงไม่อนุญาต การแจกจ่ายไบนารีที่มีรหัสที่ได้รับอนุญาตภายใต้ใบอนุญาตเหล่านี้เมื่อรวมรหัสที่มีลิขสิทธิ์ GPL ด้วย "


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