web-dev-qa-db-ja.com

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
2
Rublacava

MP3は実際にはコンテナ形式ではなく、生の.aacファイルと非常によく似た自己完結型のオーディオ圧縮形式にすぎません。内容がMP1/MP2/MP3(MPEG-1レイヤーI/II/III)であるかどうかを示す小さなヘッダーがありますが、ありません 4ccフィールドなので、mp4a表示は他の場所からのものでなければなりません。

したがって、出力を逆方向に解釈していると思います– 外部MP4コンテナにはfourcc'mp4a 'でタグ付けされたストリームがありますが、そのストリーム内でffmpegはMP3ヘッダーとそれに続く通常のMP3データを見つけます。これは、誰かがffmpeg -i Foo.mp3 -codec copy Foo.mp4を使用した場合に発生する可能性があります。

(生のAACストリーム(ADTS)は、実際には「MPEGバージョン= 4、レイヤー= 0」という同様のヘッダーを使用しますが、ではありませんいずれにせよ「MP3のAAC」。どちらのヘッダーも共通のイントロを共有しているだけなので、プログラムは4ccが間違っていてもAACデータとMP3データを区別できます。)

2
user1686