MP3 可以包含 AAC 吗?

MP3 可以包含 AAC 吗?

容器格式 MP3 可以包含编解码器为 ACC 的音频吗?

我知道 MP3 容器格式可以包含带有编解码器或 MP3 的音频(MP3 是一个容器和一个编解码器);我以为那是 MP3 可以包含的唯一编解码器,但我的想法却与之相矛盾。

我正在使用 ffmpeg 查看有关文件*的详细信息,并看到:
Stream #0:0(und): Video: h264 (High 4:4:4 Predictive) (avc1 / 0x31637661), yuv444p, 500x500 [SAR 1:1 DAR 1:1], 48 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
Stream #0:1(und): Audio: mp3 (mp4a / 0x6134706D), 44100 Hz, stereo, s16p, 320 kb/s (default)

看看上面说的部分Audio: mp3 (mp4a / 0x6134706D)——mp4a是 AAC 编解码器的 FOURCC 标识符。这说明 MP3 包含 AAC。我认为这是不可能的;这是真的吗?

*详细信息来自ffmpeg -i file.mp4

ffmpeg version N-45325-gb173e0353-static https://johnvansickle.com/ffmpeg/  Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 6.3.0 (Debian 6.3.0-18+deb9u1) 20170516
  configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc-6 --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gray --enable-libfribidi --enable-libass --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librubberband --enable-libsoxr --enable-libspeex --enable-libvorbis --enable-libopus --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libzimg
  libavutil      56.  9.100 / 56.  9.100
  libavcodec     58. 14.100 / 58. 14.100
  libavformat    58. 10.100 / 58. 10.100
  libavdevice    58.  2.100 / 58.  2.100
  libavfilter     7. 13.100 /  7. 13.100
  libswscale      5.  0.102 /  5.  0.102
  libswresample   3.  0.101 /  3.  0.101
  libpostproc    55.  0.100 / 55.  0.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'file.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.18.101
  Duration: 00:05:35.76, start: 0.000000, bitrate: 376 kb/s
    Stream #0:0(und): Video: h264 (High 4:4:4 Predictive) (avc1 / 0x31637661), yuv444p, 500x500 [SAR 1:1 DAR 1:1], 48 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: mp3 (mp4a / 0x6134706D), 44100 Hz, stereo, s16p, 320 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

答案1

MP3 并不是真正的容器格式,它只是一种独立的音频压缩格式,与原始 .aac 文件非常相似。它有一个小标题来指示内容是 MP1/MP2/MP3(MPEG-1 第 I/II/III 层),但它没有一个 fourcc 字段,因此mp4a指示必须来自其他地方。

所以我认为你是在反向解释输出——外置 MP4 容器有一个标有 fourcc 'mp4a' 的流,但在该流中,ffmpeg 发现 MP3 标头后面跟着普通 MP3 数据。如果有人使用 ,就会发生这种情况ffmpeg -i Foo.mp3 -codec copy Foo.mp4

(原始 AAC 流(ADTS)实际上使用类似的标头,其中显示“MPEG 版本 = 4,层 = 0”,但才不是无论如何将其设为“MP3 中的 AAC”。相反,两个标头只是共享一个共同的简介,这就是允许程序区分 AAC 数据和 MP3 数据的原因,尽管 fourcc 是错误的。)

相关内容