Webで使用する音声/ビデオフォーマットの簡単な説明
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