Trước hết, hãy -aq
đặt tốc độ bit biến dựa trên chất lượng - Tôi nghĩ rằng bạn đang tìm kiếm -ab
(lưu ý rằng tôi là người dùng ffmpeg, vì vậy kiến thức về cú pháp avconv của tôi bị hạn chế - Tôi không biết nó đã trôi bao xa kể từ khi cái nĩa).
Bất kể, bộ mã hóa AAC avconv / ffmpeg tích hợp là khá tệ.
fdk_aac
Bộ mã hóa AAC thực sự tốt duy nhất cho avconv / ffmpeg là libfdk_aac - nhưng giấy phép cho nó không tương thích với GPL, vì vậy để có quyền truy cập vào nó, bạn sẽ phải tự biên dịch (đó là hướng dẫn biên dịch ffmpeg, vì tôi không Tôi không biết một cái cho avconv - hướng dẫn Ubuntu sẽ tốt cho Debian, vì tôi không nghĩ có gì cụ thể về Ubuntu trong đó).
Khi bạn đã có nó, hãy làm theo hướng dẫn mã hóa AAC ; Tôi thực sự khuyên bạn nên thử -vbr
tùy chọn của fdk_aac - cài đặt 3 âm thanh trong suốt đối với tất cả các tệp tôi đã thử, nếu bạn muốn giả dược có tốc độ bit cao hơn hoặc bạn là kỹ sư âm thanh, bạn có thể thử cài đặt 5.
ffmpeg -i input.flac -c:a libfdk_aac -vbr 3 output.m4a
Không cần -map_metadata
, vì ffmpeg sẽ tự động chuyển siêu dữ liệu (và tôi khá chắc chắn rằng avconv cũng sẽ như vậy).
Đối với tốc độ bit cố định 320 kbit / s (nghiêm túc, điều này không đáng, AAC đạt được độ trong suốt của âm thanh so với âm thanh CD gốc ở khoảng 128 kbit / s cố định):
ffmpeg -i input.flac -c:a libfdk_aac -b:a 320k
neroAacEnc
Bộ mã hóa AAC của Nero nên được xem là ngang bằng với fdk_aac và qaac (Quicktime AAC). Những người khác nhau sẽ đưa ra những ý kiến khác nhau về cái nào tốt hơn, nhưng bạn sẽ chỉ nhận thấy bất kỳ sự khác biệt nào ở tốc độ bit rất thấp và mọi người đều đồng ý rằng tất cả đều có chất lượng rất cao.
neroAacEnc
có sẵn từ trang web Nero . Giải nén nó và đặt nó ở đâu đó trong $ PATH của bạn.
Thật không may, neroAacEnc
chỉ có thể lấy âm thanh WAV làm đầu vào; bạn có thể khắc phục điều này bằng cách sử dụng avconv hoặc ffmpeg làm bộ giải mã:
avconv -i input.flac -f wav - | neroAacEnc -if - -ignorelength -q 0.4 output.m4a
Thật không may, điều này sẽ loại bỏ siêu dữ liệu; để chuyển nó qua, sử dụng avprobe / ffprobe (with -show_format
) để giải nén và neroAacTag để chèn. Một kịch bản bash có thể sẽ theo thứ tự.
Xem trang HydrogenAudio trên neroAacEnc : từ bộ nhớ, -q
cài đặt 0,4 nghe có vẻ tuyệt vời đối với tôi. Bạn có thể nhắm mục tiêu một tỷ lệ bit với -br
(một lần nữa, tôi nghĩ rằng đây sẽ là cách quá mức cần thiết):
avconv -i input.flac -f wav - | neroAacEnc -if - -ignorelength -br 320000 output.m4a
EDIT: đây là tập lệnh để chuyển đổi tập tin âm thanh thành m4a bằng neroAacEnc, sau đó gắn thẻ với ffprobe và neroAacTag (yêu cầu tất cả chúng phải nằm trong một thư mục trong $ PATH của bạn). Nó có thể mất nhiều tệp đầu vào, vì vậy nếu bạn lưu nó dưới dạng convert-to-m4a
, bạn có thể chuyển đổi mọi tệp FLAC trong một thư mục có
convert-to-m4a *.flac
Nó không giới hạn chỉ các tệp FLAC; bất kỳ định dạng âm thanh nào mà ffmpeg / avconv của bạn có thể giải mã sẽ hoạt động. Bạn có thể muốn thay đổi ffprobe và ffmpeg thành avprobe và avconv:
#!/usr/bin/env bash
until [[ "$1" = '' ]]; do
ffmpeg -i "$1" -f wav - | neroAacEnc -if - -ignorelength -q 0.4 "${1%.*}.m4a"
tags=()
while read -r; do
tags+=("$REPLY")
done < <(ffprobe -i "$1" -show_format 2>/dev/null | sed -ne 's/date/year/' -e '/TAG:/s/TAG/-meta/p')
neroAacTag "${1%.*}.m4a" "${tags[@]}"
shift
done
exit 0