【音视频】音频的有损压缩技术、无损压缩技术与音频的常见编码器

文章目录


前言

在数字音频和视频领域,压缩技术是至关重要的,它可以显著减少文件大小,节省存储空间和传输带宽。压缩技术分为两大类:有损压缩和无损压缩。这两种技术各有其独特的应用场景和优缺点,理解它们的区别对于选择合适的压缩方案至关重要。


为什么需要音频压缩

音频压缩的主要目的是为了减少音频文件的大小,这样可以节省存储空间和传输时间。以下是几个简单易懂的原因:

  1. 节省存储空间:原始音频文件通常非常大,会占用大量的存储空间。通过压缩,文件变得更小,可以在设备上存储更多的音乐或音频文件。

  2. 提高传输效率:压缩后的音频文件更小,上传和下载速度更快。在网络速度有限的情况下,压缩音频可以更快地传输,减少等待时间。

  3. 节省带宽:对于在线音乐流媒体服务和广播来说,压缩音频可以节省带宽成本,允许更多用户同时收听。

  4. 方便分享和传输:较小的文件更容易通过电子邮件、消息应用程序或其他平台进行分享,不会因为文件太大而受到限制。

  5. 提高设备兼容性:许多设备和应用程序对大文件的处理能力有限,压缩音频可以提高这些设备和应用程序的兼容性和性能。

简单来说,音频压缩就是让音频文件变小,方便存储、传输和分享,同时在不同的设备上更好地播放。

压缩的原理

有损压缩

有损压缩通过丢弃或简化一些音频数据来显著减少文件大小。这种方法利用了人耳对某些声音不敏感的特点。以下是几种主要的有损压缩技术原理:

  1. 频域分析

    • 傅里叶变换:将音频信号从时间域转换到频域,以便分析各个频率成分。
    • 掩蔽效应:利用人耳的掩蔽效应,去除被更强信号掩蔽的弱信号。例如,一个强烈的低频声可以掩盖附近的高频声,这些高频声就可以被去除而不被人耳察觉。
  2. 量化

    • 量化器:将连续的音频信号值转换为离散的数值,较小的数值范围可以进一步减少数据量。
    • 量化噪声:通过心理声学模型,将量化噪声控制在听觉阈值以下,使其不被人耳察觉。
  3. 熵编码

    • 霍夫曼编码:根据数据出现的频率分配不同长度的编码,频率高的数据分配较短的编码,从而减少整体数据量。
    • 游程编码:将连续重复的数值压缩为数值和重复次数的组合。

无损压缩

无损压缩通过重新排列或优化音频数据存储方式,在不丢失任何信息的情况下减少文件大小。以下是几种主要的无损压缩技术原理:

  1. 预测编码

    • 线性预测编码(LPC):使用前几个采样点来预测当前采样点的值,只存储预测误差。这些误差通常比原始数据要小,便于进一步压缩。
  2. 熵编码

    • 霍夫曼编码:同有损压缩中使用的霍夫曼编码一样,根据数据出现的频率分配不同长度的编码。
    • 算术编码:将整个数据序列编码为一个范围内的小数,通过不断细分这个范围来表示数据序列,达到压缩目的。
  3. 块编码

    • Run-length Encoding(RLE):将连续重复的数值压缩为数值和重复次数的组合。
    • 差分编码:存储相邻采样点之间的差值,这些差值通常比原始数据要小,便于进一步压缩。

常见编码器

音频编码器是将音频数据压缩成特定格式的软件或硬件。不同的编码器使用不同的压缩技术和算法,以满足不同的需求。以下是一些常见的音频编码器及其作用和区别:

常见的音频编码器

  1. MP3 (MPEG-1 Audio Layer III)

    • 作用:最广泛使用的有损音频编码器,主要用于音乐和音频流媒体。
    • 特点:通过去除人耳不易察觉的音频信息来压缩数据,提供相对较小的文件大小和较好的音质。
    • 优点:高兼容性,几乎所有的音频播放器和设备都支持MP3格式。
    • 缺点:音质不如某些现代编码器(如AAC),特别是在低比特率下。
  2. AAC (Advanced Audio Coding)

    • 作用:比MP3更先进的有损音频编码器,广泛用于流媒体和便携设备,如Apple的iTunes。
    • 特点:在相同比特率下,提供更高的音质和更小的文件大小。
    • 优点:更高的音质,特别是在低比特率下;支持多种采样率和通道配置。
    • 缺点:兼容性不如MP3,但在现代设备和播放器中已经非常普遍。
  3. OGG Vorbis

    • 作用:开源有损音频编码器,常用于开源软件和某些游戏音频。
    • 特点:在相同比特率下,通常比MP3有更好的音质。
    • 优点:高音质,开源免费,无需支付专利费用。
    • 缺点:兼容性不如MP3和AAC,主要在开源社区和特定应用中使用。
  4. FLAC (Free Lossless Audio Codec)

    • 作用:无损音频编码器,用于高保真音频存储和传输。
    • 特点:压缩音频数据而不丢失任何信息,可以完全还原为原始音频。
    • 优点:高音质,适用于音乐存档和专业音频制作;开源免费。
    • 缺点:文件大小较大,比有损格式大得多。
  5. ALAC (Apple Lossless Audio Codec)

    • 作用:Apple公司开发的无损音频编码器,用于Apple设备和iTunes。
    • 特点:在音质和压缩率上与FLAC相当。
    • 优点:高音质,适用于音乐存档和专业音频制作;与Apple生态系统高度兼容。
    • 缺点:文件大小较大,主要用于Apple设备。
  6. WAV (Waveform Audio File Format)

    • 作用:无压缩音频编码器,常用于录音和音频编辑。
    • 特点:保留所有音频细节,音质最高。
    • 优点:最高音质,无任何压缩损失;广泛用于专业音频制作和编辑。
    • 缺点:文件非常大,不适合流媒体和便携设备存储。

上面这些编码,我们都可以使用ffmpeg进行转换

bash 复制代码
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音频格式。这种技术常用于音乐制作和录音工作流程中,确保了最高质量的音频保真度。综上所述,选择压缩技术应根据具体需求来定,权衡文件大小和质量要求,以达到最佳的用户体验和技术实现。

相关推荐
简鹿办公4 分钟前
如何提取某站 MV 视频中的音乐为 MP3 音频
音视频·简鹿视频格式转换器·视频提取mp3音频
我们的五年7 分钟前
【Linux课程学习】:进程程序替换,execl,execv,execlp,execvp,execve,execle,execvpe函数
linux·c++·学习
yufengxinpian11 分钟前
集成了高性能ARM Cortex-M0+处理器的一款SimpleLink 2.4 GHz无线模块-RF-BM-2340B1
单片机·嵌入式硬件·音视频·智能硬件
做人不要太理性33 分钟前
【C++】深入哈希表核心:从改造到封装,解锁 unordered_set 与 unordered_map 的终极奥义!
c++·哈希算法·散列表·unordered_map·unordered_set
程序员-King.42 分钟前
2、桥接模式
c++·桥接模式
chnming19871 小时前
STL关联式容器之map
开发语言·c++
程序伍六七1 小时前
day16
开发语言·c++
小陈phd1 小时前
Vscode LinuxC++环境配置
linux·c++·vscode
华清远见IT开放实验室1 小时前
【每天学点AI】实战图像增强技术在人工智能图像处理中的应用
图像处理·人工智能·python·opencv·计算机视觉
火山口车神丶2 小时前
某车企ASW面试笔试题
c++·matlab