前言
在数字音频和视频领域,压缩技术是至关重要的,它可以显著减少文件大小,节省存储空间和传输带宽。压缩技术分为两大类:有损压缩和无损压缩。这两种技术各有其独特的应用场景和优缺点,理解它们的区别对于选择合适的压缩方案至关重要。
为什么需要音频压缩
音频压缩的主要目的是为了减少音频文件的大小,这样可以节省存储空间和传输时间。以下是几个简单易懂的原因:
节省存储空间:原始音频文件通常非常大,会占用大量的存储空间。通过压缩,文件变得更小,可以在设备上存储更多的音乐或音频文件。
提高传输效率:压缩后的音频文件更小,上传和下载速度更快。在网络速度有限的情况下,压缩音频可以更快地传输,减少等待时间。
节省带宽:对于在线音乐流媒体服务和广播来说,压缩音频可以节省带宽成本,允许更多用户同时收听。
方便分享和传输:较小的文件更容易通过电子邮件、消息应用程序或其他平台进行分享,不会因为文件太大而受到限制。
提高设备兼容性:许多设备和应用程序对大文件的处理能力有限,压缩音频可以提高这些设备和应用程序的兼容性和性能。
简单来说,音频压缩就是让音频文件变小,方便存储、传输和分享,同时在不同的设备上更好地播放。
压缩的原理
有损压缩
有损压缩通过丢弃或简化一些音频数据来显著减少文件大小。这种方法利用了人耳对某些声音不敏感的特点。以下是几种主要的有损压缩技术原理:
频域分析:
- 傅里叶变换:将音频信号从时间域转换到频域,以便分析各个频率成分。
- 掩蔽效应:利用人耳的掩蔽效应,去除被更强信号掩蔽的弱信号。例如,一个强烈的低频声可以掩盖附近的高频声,这些高频声就可以被去除而不被人耳察觉。
量化:
- 量化器:将连续的音频信号值转换为离散的数值,较小的数值范围可以进一步减少数据量。
- 量化噪声:通过心理声学模型,将量化噪声控制在听觉阈值以下,使其不被人耳察觉。
熵编码:
- 霍夫曼编码:根据数据出现的频率分配不同长度的编码,频率高的数据分配较短的编码,从而减少整体数据量。
- 游程编码:将连续重复的数值压缩为数值和重复次数的组合。
无损压缩
无损压缩通过重新排列或优化音频数据存储方式,在不丢失任何信息的情况下减少文件大小。以下是几种主要的无损压缩技术原理:
预测编码:
- 线性预测编码(LPC):使用前几个采样点来预测当前采样点的值,只存储预测误差。这些误差通常比原始数据要小,便于进一步压缩。
熵编码:
- 霍夫曼编码:同有损压缩中使用的霍夫曼编码一样,根据数据出现的频率分配不同长度的编码。
- 算术编码:将整个数据序列编码为一个范围内的小数,通过不断细分这个范围来表示数据序列,达到压缩目的。
块编码:
- Run-length Encoding(RLE):将连续重复的数值压缩为数值和重复次数的组合。
- 差分编码:存储相邻采样点之间的差值,这些差值通常比原始数据要小,便于进一步压缩。
常见编码器
音频编码器是将音频数据压缩成特定格式的软件或硬件。不同的编码器使用不同的压缩技术和算法,以满足不同的需求。以下是一些常见的音频编码器及其作用和区别:
常见的音频编码器
MP3 (MPEG-1 Audio Layer III):
- 作用:最广泛使用的有损音频编码器,主要用于音乐和音频流媒体。
- 特点:通过去除人耳不易察觉的音频信息来压缩数据,提供相对较小的文件大小和较好的音质。
- 优点:高兼容性,几乎所有的音频播放器和设备都支持MP3格式。
- 缺点:音质不如某些现代编码器(如AAC),特别是在低比特率下。
AAC (Advanced Audio Coding):
- 作用:比MP3更先进的有损音频编码器,广泛用于流媒体和便携设备,如Apple的iTunes。
- 特点:在相同比特率下,提供更高的音质和更小的文件大小。
- 优点:更高的音质,特别是在低比特率下;支持多种采样率和通道配置。
- 缺点:兼容性不如MP3,但在现代设备和播放器中已经非常普遍。
OGG Vorbis:
- 作用:开源有损音频编码器,常用于开源软件和某些游戏音频。
- 特点:在相同比特率下,通常比MP3有更好的音质。
- 优点:高音质,开源免费,无需支付专利费用。
- 缺点:兼容性不如MP3和AAC,主要在开源社区和特定应用中使用。
FLAC (Free Lossless Audio Codec):
- 作用:无损音频编码器,用于高保真音频存储和传输。
- 特点:压缩音频数据而不丢失任何信息,可以完全还原为原始音频。
- 优点:高音质,适用于音乐存档和专业音频制作;开源免费。
- 缺点:文件大小较大,比有损格式大得多。
ALAC (Apple Lossless Audio Codec):
- 作用:Apple公司开发的无损音频编码器,用于Apple设备和iTunes。
- 特点:在音质和压缩率上与FLAC相当。
- 优点:高音质,适用于音乐存档和专业音频制作;与Apple生态系统高度兼容。
- 缺点:文件大小较大,主要用于Apple设备。
WAV (Waveform Audio File Format):
- 作用:无压缩音频编码器,常用于录音和音频编辑。
- 特点:保留所有音频细节,音质最高。
- 优点:最高音质,无任何压缩损失;广泛用于专业音频制作和编辑。
- 缺点:文件非常大,不适合流媒体和便携设备存储。
上面这些编码,我们都可以使用ffmpeg进行转换
C:\Users\wyj\Music>ffmpeg -i "Joel Hanson_Sara Groves-Traveling Light.mp3" T.flac
ffmpeg version 2024-07-15-git-350146a1ea-full_build-www.gyan.dev Copyright (c) 2000-2024 the FFmpeg developers
built with gcc 13.2.0 (Rev5, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libaribcaption --enable-libdav1d --enable-libdavs2 --enable-libopenjpeg --enable-libquirc --enable-libuavs3d --enable-libxevd --enable-libzvbi --enable-libqrencode --enable-librav1e --enable-libsvtav1 --enable-libvvenc --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxeve --enable-libxvid --enable-libaom --enable-libjxl --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-dxva2 --enable-d3d11va --enable-d3d12va --enable-ffnvcodec --enable-libvpl --enable-nvdec --enable-nvenc --enable-vaapi --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libcodec2 --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
libavutil 59. 28.100 / 59. 28.100
libavcodec 61. 10.100 / 61. 10.100
libavformat 61. 5.101 / 61. 5.101
libavdevice 61. 2.100 / 61. 2.100
libavfilter 10. 2.102 / 10. 2.102
libswscale 8. 2.100 / 8. 2.100
libswresample 5. 2.100 / 5. 2.100
libpostproc 58. 2.100 / 58. 2.100
Input #0, mp3, from 'Joel Hanson_Sara Groves-Traveling Light.mp3':
Metadata:
title : Traveling Light
artist : Joel Hanson/Sara Groves
album : Traveling Light
date : 2002
Duration: 00:03:28.64, start: 0.025056, bitrate: 333 kb/s
Stream #0:0: Audio: mp3 (mp3float), 44100 Hz, stereo, fltp, 320 kb/s
Metadata:
encoder : Lavc58.13
Stream #0:1: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 3000x3000 [SAR 72:72 DAR 1:1], 90k tbr, 90k tbn (attached pic)
Metadata:
title : Traveling Light
comment : Cover (front)
Stream mapping:
Stream #0:1 -> #0:0 (mjpeg (native) -> png (native))
Stream #0:0 -> #0:1 (mp3 (mp3float) -> flac (native))
Press [q] to stop, [?] for help
[flac @ 00000286e0af1440] encoding as 24 bits-per-sample, more is considered experimental. Add -strict experimental if you want to encode more than 24 bits-per-sample
[swscaler @ 00000286e2672940] deprecated pixel format used, make sure you did set range correctly
Last message repeated 3 times
Output #0, flac, to 'T.flac':
Metadata:
title : Traveling Light
artist : Joel Hanson/Sara Groves
album : Traveling Light
date : 2002
encoder : Lavf61.5.101
Stream #0:0: Video: png, rgb24(pc, gbr/unknown/unknown, progressive), 3000x3000 [SAR 1:1 DAR 1:1], q=2-31, 200 kb/s, 90k fps, 90k tbn (attached pic)
Metadata:
title : Traveling Light
comment : Cover (front)
encoder : Lavc61.10.100 png
Stream #0:1: Audio: flac, 44100 Hz, stereo, s32 (24 bit), 128 kb/s
Metadata:
encoder : Lavc61.10.100 flac
[out#0/flac @ 00000286e0f41440] video:5556KiB audio:43044KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: 0.016965%
frame= 1 fps=0.0 q=-0.0 Lsize= 48608KiB time=00:00:00.00 bitrate=36199656000.0kbits/s speed=2.66e-05x
并使用ffplay
进行播放,因为有些格式播放器不支持,所以我们直接使用ffplay
作用和区别
有损编码器(MP3, AAC, OGG Vorbis):
- 作用:通过丢弃部分音频信息来减小文件大小,适合需要节省存储空间和带宽的应用,如音乐流媒体、在线广播和便携设备。
- 区别:MP3最为普及,但音质相对较低;AAC在低比特率下音质更好,兼容性逐渐提高;OGG Vorbis在开源社区和某些特定应用中表现优异。
无损编码器(FLAC, ALAC, WAV):
- 作用:压缩音频数据而不丢失任何信息,适合需要高保真音质的应用,如音乐存档、专业音频制作和编辑。
- 区别:FLAC和ALAC都提供无损压缩,但FLAC开源且适用更广泛的设备,而ALAC则主要用于Apple生态系统;WAV不进行压缩,音质最高,但文件非常大。
通过理解这些编码器的作用和区别,可以根据具体需求选择合适的编码器,以实现最佳的音质和文件大小平衡。
总结
有损压缩技术通过牺牲一些细节和数据精度来实现高压缩率,例如音频领域中的MP3格式。尽管有损压缩会导致一定程度上的信息丢失,但它在大多数情况下提供了令人满意的音质,尤其适合于音乐流媒体和在线广播等应用。相比之下,无损压缩技术能够在不损失音频或视频质量的前提下减小文件大小,如FLAC音频格式。这种技术常用于音乐制作和录音工作流程中,确保了最高质量的音频保真度。综上所述,选择压缩技术应根据具体需求来定,权衡文件大小和质量要求,以达到最佳的用户体验和技术实现。