目录
问题
正文
MP3 是封装格式
MP3 是编码格式
结论
问题
MP3 是我们在日常生活中最常见的音频格式之一,但是作为音视频相关的开发人员有没有这样的疑问:MP3 到底是音频编码格式还是音频封装格式?
正文
MP3 是封装格式
mp3 是一种音频封装格式,可以从两方面验证我们的说法。首先,日常生活中,我们经常可以看到 *.mp3 的音频文件,就像视频封装格式 mp4、flv 一样。
另外,我们还可以利用第三方工具来佐证,比如使用 ffmpeg。我们都知道可以使用如下命令查看 ffmpeg 支持的封装格式列表。
ffmpeg -formats
那好,我们就过滤一下查找结果,看看其中有没有 mp3,执行命令和对应的结果如下:
liuzhen-6:bin lz$ ./ffmpeg -formats | grep mp3 ffmpeg version git-2020-06-28-4cfcfb3 Copyright (c) 2000-2020 the FFmpeg developers built with Apple clang version 11.0.0 (clang-1100.0.33.8) configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libsrt --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libgsm --enable-appkit --enable-avfoundation --enable-coreimage --enable-audiotoolbox libavutil 56. 55.100 / 56. 55.100 libavcodec 58. 93.100 / 58. 93.100 libavformat 58. 47.100 / 58. 47.100 libavdevice 58. 11.100 / 58. 11.100 libavfilter 7. 86.100 / 7. 86.100 libswscale 5. 8.100 / 5. 8.100 libswresample 3. 8.100 / 3. 8.100 libpostproc 55. 8.100 / 55. 8.100 DE mp3 MP3 (MPEG audio layer 3)
查询结果截图:
我们可以看到,搜索结果中是包含 mp3 的,因此说明 mp3 就是一种音频封装格式。
MP3 是编码格式
mp3 是一种音频编码格式,同样,我们可以利用 ffmpeg 验证。我们都知道可以使用如下命令查看 ffmpeg 支持的编码格式列表。
ffmpeg -encoders
我们也过滤一下查找结果,看看其中有没有 mp3,执行命令和对应的结果如下:
liuzhen-6:bin lz$ ./ffmpeg -encoders | grep mp3 ffmpeg version git-2020-06-28-4cfcfb3 Copyright (c) 2000-2020 the FFmpeg developers built with Apple clang version 11.0.0 (clang-1100.0.33.8) configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libsrt --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libgsm --enable-appkit --enable-avfoundation --enable-coreimage --enable-audiotoolbox libavutil 56. 55.100 / 56. 55.100 libavcodec 58. 93.100 / 58. 93.100 libavformat 58. 47.100 / 58. 47.100 libavdevice 58. 11.100 / 58. 11.100 libavfilter 7. 86.100 / 7. 86.100 libswscale 5. 8.100 / 5. 8.100 libswresample 3. 8.100 / 3. 8.100 libpostproc 55. 8.100 / 55. 8.100 A..... libmp3lame libmp3lame MP3 (MPEG audio layer 3) (codec mp3) A..... libshine libshine MP3 (MPEG audio layer 3) (codec mp3)
查询结果截图:
没错,我们也查询到了 mp3,说明 mp3 是一种音频编码格式。
注意:我们直接使用 mp3 设置音频编码类型时,ffmpeg 是不识别的,我们需要使用 libmp3lame。
接下来,我们再从另外一个方面验证一下 mp3 是音频编码格式的结论。我们都知道,任何编码器和解码器都是成对儿存在的,对于 mp3 音频格式也一样,如果存在 mp3 编码器,那么也一定存在 mp3 解码器。
没错,ffmpeg 确实提供了 mp3 对应的解码器,执行命令和对应的查询结果如下:
liuzhen-6:bin lz$ ./ffmpeg -decoders | grep mp3 ffmpeg version git-2020-06-28-4cfcfb3 Copyright (c) 2000-2020 the FFmpeg developers built with Apple clang version 11.0.0 (clang-1100.0.33.8) configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libsrt --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libgsm --enable-appkit --enable-avfoundation --enable-coreimage --enable-audiotoolbox libavutil 56. 55.100 / 56. 55.100 libavcodec 58. 93.100 / 58. 93.100 libavformat 58. 47.100 / 58. 47.100 libavdevice 58. 11.100 / 58. 11.100 libavfilter 7. 86.100 / 7. 86.100 libswscale 5. 8.100 / 5. 8.100 libswresample 3. 8.100 / 3. 8.100 libpostproc 55. 8.100 / 55. 8.100 A....D mp3float MP3 (MPEG audio layer 3) (codec mp3) A....D mp3 MP3 (MPEG audio layer 3) A....D mp3_at mp3 (AudioToolbox) (codec mp3) A....D mp3adufloat ADU (Application Data Unit) MP3 (MPEG audio layer 3) (codec mp3adu) A....D mp3adu ADU (Application Data Unit) MP3 (MPEG audio layer 3) A....D mp3on4float MP3onMP4 (codec mp3on4) A....D mp3on4 MP3onMP4
查询结果截图:
哈哈,果然我们的结论是正确的,确实存在 mp3 音频解码器,而且还有很多种。
结论
综上所述,mp3 既是一种音频封装格式,又是一种音频编码格式。严谨的话,在日常工作中我们需要明确的进行区分。其实,很多时候,在实际工作中,二者是经常被我们混淆的。明确了这个些概念后有哪些帮助呢,下一篇文章就为大家揭晓。
作者简介:大家好,我是 Data-Mining,是一位音视频技术爱好者,前后就职于传统广电巨头和音视频互联网公司,具有丰富的音视频直播和点播相关经验,对 WebRTC、FFmpeg 和 Electron 有非常深入的了解,