🎥

Webで使用する音声/ビデオフォーマットの簡単な説明

2022/03/09に公開

mdn web docsのMedia container formats (file types) https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Containers#common_container_formats を読んで,内容の一部をまとめた.
この記事にはwebでよく使用されるaudio/videoのファイルフォーマットの説明と,どのフォーマットを使用するかを決めるときのガイドが含まれており,ブラウザのサポート状況等は含まれていない.

Media container formats (file types)

audioとvideoのメディアファイルのフォーマットは以下の要素に分解できる

  • audioに使用されているコーデック
  • videoに使用されているコーデック
  • 使用されているメディアコンテナフォーマット(ファイルタイプ)

(コンテナフォーマット(ファイルタイプ)の種類と,その中で使用されているaudio/videoをエンコード・デコードするためのコーデックの種類があるということ)

webRTCでは,

  • コンテナを使用しない
  • 各トラックを表現するのにMediaStreamTrackオブジェクトを使用して,encodeされたaudioとvideoトラックを直接streamする

Common container formats

  • 最もよく使うフォーマットはMPEG-4 (MP4), QuickTime Movie (MOV), Wavefile Audio File Format (WAV).
  • MP3, Ogg, WebM, AVIも使用される
  • 特定のコンテナとコーデックの組み合わせは独自の拡張子とMIME typeを持つことがある
    • 1つのOpus audio trackを持つOggファイルはOpusファイルと呼ばれ.opusを使用するが,Oggファイルである
    • MPEG-1コンテナでMPEG-1 Audio Layer III encodingされた1つのaudio trackを持つファイルはMP3と呼ばれaudio/mp3 MIME typeを使い.mp3拡張子だがMPEGファイル

以降でそれぞれのコンテナフォーマットを説明する

3GP (3GPP)

  • 携帯ネットワークでモバイルデバイスで使うためにvideoとaudioをカプセル化するために使用された
  • 3Gの携帯電話のために設計されているが新しい携帯等でも使用され,遅いネットワークや低性能携帯では使用されている
  • ISO Base Media File Format とMPEG-4から派生している

MIME type

  • audio: audio/3gpp, audio/3gpp2, audio/3gp2
  • video: video/3gpp, video/3gpp2, video/3gp2
  • codecs パラメタをMIME typeに追加してcodecの種類を明示することもできる

ADTS (Audio Data Transport Stream)

  • audioデータMPEG-4 Part 3で指定されたコンテナフォーマット
  • インターネットラジオ等のaudio streamへの使用を想定している
  • 基本的には,最小のヘッダとADTSフレームからなる素のAAC audio dataである

MIME type

  • audio: audio/aac, audio/mpeg
  • ADTSフレームが使用されているならaudio/accを使い,audioフレームがMPEG-1/MPEG-2 Audio Layer I, II, IIIならaudio/mpegを使う

FLAC (Free Lossless Audio Codec)

  • 可逆圧縮のaudio codecであり,同名の関連するコンテナフォーマットのみがこのaudioを含めることができる
  • 特許で保護されていない

MIME type

  • audio: audio/flac, audio/x-flac (標準ではない)

MPEG/MPEG-2

  • MPEG-1 と MPEG-2は基本的に同じで,違いはコンテナよりもmedia data フォーマットによる
  • Moving Picture Experts Group (MPEG)によって作られ,物理メディア(DVDなど) で広く利用される
  • webにおいてはMPEG-1 と MPEG-2はあまり使用されず,MP3ファイルとして Layer_III/MP3のサウンドデータを含めるための利用が一般的

MIME type

  • audio: audio/mpeg,
  • video: video/mpeg,

MPEG-4 (MP4)

  • MPEGファイルフォーマットの最新版で,仕様のPart 1とPart 14に定義された2バージョンのフォーマットがある
  • MPEG-4 Part 1は1999年,Part 14によるversion 2のフォーマットは2003年に追加された
  • 最も利用されており広くサポートされているいくつかのcodecをサポートしているため人気がある
  • Appleが開発した QuickTime file format から派生したISO base media file formatから派生している
  • MIME tpyeでMPEG-4 mediaを指定するときcodecsパラメタを追加してaudio/videoで使用されているcodecを明示できる.また,profile, level, codec設定等も提供できる

MIME type

  • audio: audio/mp4
  • video: video/mp4

Ogg

  • Xiph.org Foundationによって維持されているfreeでopenなフォーマット
  • Ogg フレームワークは特許保護されていないTheora video codecやVorbis, Opus audio codesc等のメディアデータformatも定義している
  • あまり広くサポートされておらず,通常はWebMを使用したほうが良いが,WebMが使えない古いブラウザではOggが便利な状況がある

MIME type

  • audio: audio/ogg

  • video: video/ogg

  • mediaがaudioかvideoどちらを含むか不明なときはapplication/oggを使うことができる(フォールバックにする)

  • codecsパラメタを追加してcodecの種類を明示できる

QuickTime (QTFF, QT, or MOV)

  • Appleによって同名のメディアフレームワークで使うために作成された
  • 拡張子.movは元々動画のために使われたため
  • QTFFはMPEG-4の元になっているが,両者は異なり互換性はない
  • QuickTimeファイルはいかなる時間ベースのデータもサポートする(audio, video, text tracks等)
  • windowsのQuickTimeは2016以降サポートされておらず,使うべきではない
  • windows media playerがQuickTime version 2.0をサポートしているが,それ以降のバージョンはサードパーティの追加が必要
  • サポートしているaudio/video codecの種類が非常に多い
  • QuickTimeのサポートはApple devicesを主としており,webではそれほど広く使用されていない

MIME type

  • video: video/quicktime

Waveform Audio File Format (WAVE)

  • 拡張子が.wavなのでWAVとも呼ばれる
  • audio bitstream dataを保存するためにMicrosoft と IBMにより開発され,最初のリリースは1991年
  • Resource Interchange File Format (RIFF)から派生している
  • WAVコーデックレジストリはRFC 2361にあるが,ほぼすべてのWAV codecはlinear PCMを使っているのでそれ以外のcodecはサポートが少ない

MIME type

  • audio: audio/wave (これが推奨), audio/wav, audio/x-wav, audio/x-pn-wav

WebM (Web Media)

  • Matroska Multimedia Container に基づいて,モダンなweb環境での使用のために設計された
  • 最初の導入は2010年で現在では広くサポートされている
  • WebMの準拠した実装はVP8, VP9 video codecと,VorbisおよびOpus audio codecをサポートする必要がある
  • 基本的にfreeでopenな技術を使用しているが,それ以外のcodecをサポートしている製品もある
  • WebMコンテナフォーマットと必要なcodecはすべてopen licenseのもとで利用できる.それ以外のcodecはライセンスが必要

MIME type

  • audio: audio/webm
  • video: video/webm

正しいコンテナを選ぶ

ガイドライン

コンテナの選択は何に使用するかによる.media dataを編集するなら非圧縮フォーマットが性能を改善するし,最低でもlossless圧縮フォーマットを使えば圧縮アーティファクトが発生する各再圧縮で乗算されるため,ノイズが蓄積することはない

  • モバイル,特にローエンドデバイスや遅いネットワークのユーザが使うなら3GPコンテナと適切な圧縮を提供する
  • 特定のエンコーディングが必要なら,コンテナがそのcodecをサポートしているか確認する
  • 非プロプライエタリなフォーマットがほしいなら FLAC (audio) や WebM (video)のようなオープンなフォーマット
  • 何らかの理由で1種類しかフォーマットを提供できないなら最も広いデバイスとブラウザでサポートされたMP3 (audio) や MP4 (video, audio)のようなフォーマット
  • 音声のみなら音声のみのコンテナで良い.すべての特許が切れているのでMP3は広くサポートされており良い選択.WAVEは非圧縮なのでlarge audio samplesに使うには注意.FLACは可逆圧縮なので,考慮しているブラウザが全てサポートしていれば良い選択.
  • 可逆圧縮であるFLAC, ALACはどちらもサポートが少ない.FLACは割とサポートされているがmacOSでは追加ソフトが必要で,iOSではサポートがない

アドバイス

audio

  • 一般的な再生目的: MP3
  • 可逆圧縮: FLAC(ALACでフォールバック)
  • 非圧縮: WAV

video

  • 一般的なケース(open formatがいいとき): WebM(MP4でフォールバック)
  • 一般的なケース: MP4(WebMかOggでフォールバック)
  • 低速接続のために高圧縮: 3GP(MP4でフォールバック)
  • 古いデバイスやブラウザへの互換性: QuickTime(AVI, MPEG-2でフォールバック)

フォールバックの例

<video controls
	width="250"
	height="200"
	muted>
<source src="/media/cc0-videos/flower.webm"
	type="video/webm">
<source src="/media/cc0-videos/flower.mp4"
	type="video/mp4">
This browser does not support the HTML5 video element.
</video>

Discussion