Ý tưởng
Nén file MP3 từ 128 kbps (kilobit per second) xuống dưới 16 kbps, giúp thời lượng lưu trữ nhiều hơn gấp 8.
Chất lượng âm thanh sẽ giảm, nhưng khi phát qua loa của máy nghe pháp sẽ ít cảm thấy sự khác biệt.
Phương pháp nén
Giảm sample rate
Sample rate: Số lần trên giây mà một tín hiệu âm thanh được lấy mẫu để chuyển thành tín hiệu số.
Số lượng mẫu trên 1 giây càng thấp thì file nén ra càng nhỏ.
Âm thanh gốc (trích đoạn 30 giây)
Duration: 00:00:30.01, start: 0.007500, bitrate: 103 kb/s Stream #0:0(eng): Audio: opus, 48000 Hz, stereo, fltp
Giảm sample rate xuống 8000 Hz
ffmpeg -hide_banner -y -i "$input" -c:a libmp3lame \ -ar 8000 \ "$output"
Dùng mã hóa VBR
MP3 có ba phương pháp mã hóa:
- CBR (Constant Bit Rate): Mỗi giây của file âm thanh được nén với cùng một bitrate, nhưng không tối ưu dung lượng.
- VBR (Variable Bit Rate): Cho phép bitrate thay đổi tùy theo độ phức tạp của âm thanh. Đoạn phức tạp có bitrate cao hơn, đoạn đơn giản có bitrate thấp hơn, giúp tối ưu dung lượng mà vẫn giữ được chất lượng tốt nhất có thể.
- ABR (Average Bit Rate - Bitrate trung bình): Kết hợp giữa CBR và VBR, giúp cân bằng giữa chất lượng và dung lượng.
Trong ba phương pháp, VBR tối ưu nhất về dung lượng nhưng có khả năng tương thích thấp với một số máy nghe MP3. Do đó, tùy theo thiết bị, nên thử với VBR trước, rồi đến ABR và CBR.
Thêm VBR
ffmpeg -hide_banner -y -i "$input" -c:a libmp3lame \ -ar 8000 \ -q:a 9 \ "$output"
Thu hẹp phạm vi tần số
Frequency: Số lần dao động của sóng âm trong một giây, được đo bằng Hertz (Hz). Tai người có thể nghe âm thanh trong khoảng 20 Hz - 20 kHz.
Khi giảm sample rate xuống 8000 Hz, phạm vi tần số đầu ra đã giảm từ 0 - 14 kHz xuống còn 0 - 4 kHz. Bước này tiếp tục thu hẹp phạm vi tần số xuống Narrowband (300–3,400 Hz).
Narrowband chủ yếu được sử dụng trong hệ thống điện thoại truyền thống, giúp tối ưu băng thông để truyền giọng nói hiệu quả mà không tiêu tốn quá nhiều tài nguyên mạng.
Thêm narrowband
ffmpeg -hide_banner -y -i "$input" -c:a libmp3lame \ -ar 8000 \ -q:a 9 \ -af "highpass=300,lowpass=3400" \ "$output"
Down-mix từ stereo sang mono
Hai kênh trái (L) và phải (R) được kết hợp lại thành một kênh duy nhất.
Thêm down-mix
ffmpeg -hide_banner -y -i "$input" -c:a libmp3lame \ -ar 8000 \ -q:a 9 \ -af "highpass=300,lowpass=3400" \ -ac 1 \ "$output"
Tổng kết
Kết quả nén đoạn trích 30 giây
ffmpeg -hide_banner -y -i "$input" -c:a libmp3lame \
-ar 8000 \
-q:a 9 \
-af "highpass=300,lowpass=3400" \
-ac 1 \
"$output"
Phương pháp | Bitrate (kbps) | Giảm thêm |
---|---|---|
Gốc | 101.4 | - |
Sample rate | 23.6 | 77% |
VBR | 15.2 | 36% |
Narrowband | 14.7 | 3% |
Downmix | 14.1 | 5% |
Kết quả nén một bài giảng
Phương pháp | Bitrate (kbps) | File size (MB) | Giảm thêm |
---|---|---|---|
Gốc | 101.4 | 84.3 | - |
Sample rate | 23.4 | 19.5 | 77% |
VBR | 15.3 | 12.7 | 35% |
Narrowband | 14.7 | 12.2 | 4% |
Downmix | 14.0 | 11.6 | 5% |