Lệnh FFmpeg để chuyển đổi MP3 sang AAC


21

Tôi có thể ban hành lệnh này:

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

để tạo một tập tin m4a.

Nhưng khi tôi ban hành lệnh này

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

ffmpeg đang đưa ra một lỗi nói

Không thể ghi tiêu đề cho tệp đầu ra # 0 (tham số codec không chính xác?).

Ngoài ra, kích thước của tệp m4a thực sự lớn hơn gần 5,8 lần so với tệp gốc, đây hoàn toàn không phải là điều tôi muốn và tại sao tôi muốn chuyển đổi sang AAC.

Câu trả lời:


38

Làm cách nào để chuyển đổi sang AAC?

Đây là lệnh FFmpeg cơ bản nhất để chuyển đổi đầu vào thành âm thanh AAC bằng AAC FFmpeg chất lượng cao nhất có. libfdk_aaclà bộ mã hóa Fraunhofer AAC và nó có sẵn khi bạn biên dịch FFmpeg với sự hỗ trợ cho nó.

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

Để thay đổi chất lượng, bạn có hai tùy chọn:

  • Đối với bitrate biến (VBR), sử dụng -vbrtùy chọn. Ví dụ, -vbr 4là một lựa chọn tốt (khoảng 128 kBit / s cho âm thanh nổi). Cao hơn có nghĩa là tốt hơn. Giá trị nằm trong khoảng từ 1 đến 5.

    ffmpeg -i input.mp3 -c:a libfdk_aac -vbr 4 output.m4a
    
  • Đối với bitrate cố định (CBR), -b:aví dụ sử dụng tùy chọn -b:a 128k. 128 kBit / s nên đủ tốt cho hầu hết các tình huống. Bạn thường có thể chọn một cái gì đó thấp hơn là tốt.

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

Bạn cũng có thể sử dụng HE-AAC (v1 / v2) thay vì cấu hình AAC-LC (độ phức tạp thấp) mặc định, phù hợp nhất cho tốc độ bit thấp:

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

Nếu tôi không có libfdk_aacthì sao?

Một số phiên bản của FFmpeg không có libfdk_aac(vì lý do cấp phép). Nếu đó là trường hợp, bạn có thể sử dụng bộ mã hóa AAC tích hợp:

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

Bộ mã hóa này không hỗ trợ VBR đúng cách, vì vậy nếu bạn cần hoặc HE-AAC, hãy đọc tiếp.

Bạn có thể tự biên dịch ffmpeg và thêm libfdk_aachỗ trợ. Có hướng dẫn trên FFmpeg Wiki . Biên dịch dễ dàng trên Linux, dễ dàng vừa phải trên OS X và khá khó trên Windows. Khi bạn làm theo các hướng dẫn biên dịch và cài đặt các thư viện thích hợp trước đó, FFmpeg hiện cung cấp cho bạn tùy chọn để sử dụng libfdk_aac.


Có một số vấn đề với cách tiếp cận ban đầu của bạn:

  • alackhông phải là AAC. ALAC là Bộ giải mã âm thanh không mất dữ liệu của Apple , trong khi AAC là Mã hóa âm thanh nâng cao .

  • Đó là lý do tại sao đầu ra của bạn lớn hơn đầu vào, vì ngược lại với MP3, ALAC vẫn được nén, nhưng nó không bị mất - đó là lý do tại sao nó cần lưu trữ nhiều dữ liệu hơn.

  • .aackhông phải là thùng chứa đầu ra cho âm thanh ALAC. Nếu bạn sử dụng AAC, điều đó sẽ làm việc. Tôi sẽ sử dụng MP4 hoặc M4A mặc dù.


Trên Ubuntu 12.04 tôi không thể sử dụng một tùy chọn -c:a, điều này có bất kỳ từ đồng nghĩa nào không? Tôi đoán nó có thể có nghĩa -acodec:anhưng cuối cùng tôi đã bỏ nó đi và ffmpegcó thể suy ra một codec dựa trên tên tệp đầu ra mong muốn. (Cần -strict experimentalmặc dù; và ném vào -map_metadata 0:0để có biện pháp tốt, để bảo toàn các thẻ ID3.)
tripleee

Cũng đáng chú ý: Tôi muốn các tệp M4B (audiobook), ffmpegkhông xuất hiện để hỗ trợ, nhưng chuyển đổi thành M4A và sau đó chỉ đổi tên dường như hoạt động.
tripleee

@tripleee Điều đó có nghĩa là bạn đang sử dụng một chương trình lỗi thời được gọi ffmpeg, nhưng nó thực sự không phải từ FFmpeg, mà là ngã ba Libav. Ubuntu không may gói nó thay vì ffmpeg "thực". Xem: Ai có thể cho tôi biết sự khác biệt và mối quan hệ giữa ffmpeg, libav và avconv
slhck

@slhck: Cảm ơn đã cập nhật nhanh chóng và liên kết!
tripleee

1
@tripleee Trên thực tế không, các tệp .m4a giống hệt với .mp4 (nó chỉ là một quy ước đặt tên cho các tệp mp4 chỉ có âm thanh), nhưng có định dạng khác với .aac (được gọi là luồng ADTS). Bạn cũng có thể buộc FFmpeg xuất ra ở định dạng ADTS bằng cách thêm -f adts.
Bigue Nique 22/03/2016

4

Dễ dàng chuyển đổi sang AAC cho Zeranoe Windows Builds

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

Sử dụng "aac" thay vì libfaac hoặc libfdk_aac: https://trac.ffmpeg.org/wiki/Encode/AAC

"FFmpeg có thể hỗ trợ ba bộ mã hóa AAC-LC (aac, libfaac, libfdk_aac) và một bộ mã hóa HE-AAC (v1 / 2) (libfdk_aac). Giấy phép của libfaac và libfdk_aac không tương thích với GPL. phân phối nhị phân chứa mã được cấp phép theo các giấy phép này khi mã được cấp phép GPL cũng được bao gồm. "


2
libfaachỗ trợ cũng đã được gỡ bỏ kể từ 3.2.
slhck
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.