コンテナ形式の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
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データを区別できます。)