目录
0 前言
1 数字封装格式 Digital container format
2 多媒体封装格式 Multimedia container formats
2.1 音频文件格式 Audio file format
2.2 图像文件格式 Image file format
2.3 视频文件格式 Video file format
3 重要的视频文件格式
3.1 QuickTime File Format (.mov)
3.2 ISO Base Media File Format
3.3 MP4
3.4 FLV
3.5 MPEG-TS
3.6 HLS
3.7 MKV
本文将是一篇如何学习音视频封装的总览性文档,借此梳理并形成自己的关于音视频封装这个知识点的完整知识树,将一切零散学习到的东西归总起来,一是方便后来者快速入门,二是促进自我学习,自我总结,形成良好的知识体系。
学习的内容主要来源于三个方面:Wikipedia,Blog,Specification。鉴于这三者都是非常重要的东西,那么每个知识点梳理前都会提供这三者相关的链接。一是方便自己后续查阅,学而时习之;二是,告知赏光看此篇文章的同道者们,如果想要理解透彻,这些是必看内容。
写博客很费时,一篇文章不会一蹴而就,慢慢补充之。2019年3月4日记之。
1. 内容来源
Wikipedia: Digital container format
2. 简介
一个container (容器)或者 wrapper format(封装格式) 是一个元数据文件格式,其规范描述了不同类型的数据元素以及描述这些数据元素的元数据(metadtata)如何在一个电脑文件中共存。
在最早的跨平台的容器格式为DER(Distinguished Encoding Rules)和1985年出现的IFF(Interchange File Format),容器格式在多媒体应用中使用非常频繁。
根据定义,一个容器格式可以封装任何类型的数据。尽管确实存在这样的文件格式,比如微软的DLL文件,但是绝大多数的容器格式是为了特殊数据存储需求而进行特殊设计的格式。比如,存在一系列的专门为多媒体数据存储而设计的多媒体文件格式。由于音频流和视频流数据可以被不同的编解码算法进行编码和解码,一种容器格式在单个文件格式中就能容纳被不同编码算法编码的音频流及视频流。
1. 内容来源
Wikipedia: Digital container format
2. 简介
Multimedia container format / file format / wrapper format 多媒体容器格式/文件格式/封装格式是同一个东西。
容器文件用来定义和交互存储不同类型的数据。简单的容器格式可以存储不同类型的音频格式,而更高级的容器格式可以支持多音频和视频流,字幕流,章节信息,元素据(标签tags),以及用于不同流一起进行回放时的同步信息。在绝大多数的情况下,文件头(即文件的元数据和同步块之所在)对于不同的容器格式是不一样的。比如,为最优的,低品质的,网络传输视频流所设计的容器格式与为高质量的,蓝光高清视频流的容器格式是不一样的。
容器格式的组成部分在不同的容器中有不同的称呼:RIFF(Resource interchange file format)和PNG文件中称为"chunks",QuickTime/MP4文件中称之为"atoms" 和 "Box",MPEG-TS文件中称之为"packets",JPEG文件中成为"segments"。而"chunks"中主要的内容称之为"data" (数据)或者为 "payload"(载荷)。
3. 容器存储方式
第一种:大多数容器格式存储的是chunks序列,每个chunk都有一个文件头来描述这个chunk。也即每个chunk中既包含了媒体的描述信息,也包含了真正的媒体数据。典型的比如MPEG-TS文件。
另一种:类似于TIFF(Tagged Image File Format)格式一般是只有一个文件头,文件头中的元数据描述了媒体数据以及媒体数据在此文件中的偏移量。也即媒体数据本身以及描述媒体数据的metadata是在一个多媒体文件中是分开存储的。特别的,文件头元数据中描述媒体数据偏移位置,分块等所建立表格信息,我们称之为索引,可以快速的定位查找想要获取的媒体数据。典型的比如mp4文件。
第一种的优势:模块化的"chunks"在出现文件损毁,丢帧或者位滑动的情况下容易进行错误隐藏和恢复,而通过偏移量来定位媒体数据的存储方式在出现位滑动的情况下容易造成帧错误。
4. 容器格式分类
一些容器格式是专门存储音频数据的(Audio File Format):
一些容器格式是专门存储静态图片的(Image File Format):
视频容器格式一般可以存储多种类型的音频,视频以及其他媒体数据,比如字幕,文本信息,字体信息(Video File Format):
1. 内容来源
Wikipedia: Audio file format
2. 简介
音频文件格式是为了在电脑系统上存储数字音频数据而设计的文件格式。音频数据(不包含metadata音频描述信息,正真的音频数据)的bit布局称之为音频编码格式 audio coding format ,音频数据可以是非压缩的原始PCM数据,也可以是为了减小文件大小进行了压缩的格式,通常使用有损压缩。音频文件可以是音频编码格式的原始比特流,但更多的是将音频编码格式的原始比特流嵌入音频文件格式的存储层,即meta data + media data存储的方式。
3. 格式类型
明确的区分音频编码格式(audio coding format),包含原始音频数据的容器(container),以及音频编解码器(audio codec)三者的含义是非常重要的:音频编解码器是用来对原始音频数据进行编码和解码的。编码后的音频数据一般存储在音频容器文件中。尽管大多数的音频文件格式只支持一种编码类型音频数据,但是像 Matroska(mkv) or AVI这种多媒体容器可能会支持多种类型的音频编码数据和视频编码数据
4. 分类
根据存储内容,主要分三种音频格式文件:
.ape
), WavPack (filename extension .wv
), TTA, ATRAC Advanced Lossless, ALAC (filename extension.m4a
), MPEG-4 SLS, MPEG-4 ALS, MPEG-4 DST, Windows Media Audio Lossless (WMA Lossless), and Shorten (SHN).5. 非压缩音频文件格式
主要的非压缩音频格式为Linear pulse-code modulation (LPCM),和CD中使用的数字音频格式PCM是同一种类型,是低级音频API和D / A转换器硬件最常用的格式。尽管LPCM可以作为一种原始音频数据格式存储于电脑上,但是最常用的方式还是封装进入音频文件格式中,Windows上是.wav文件,macOS上是.aiff文件。
AIFF是基于Interchange File Format (IFF)的音频文件格式,而WAV是基于相似的Resource Interchange File Format (RIFF)的音频文件格式。WAV和AIFF文件可以用来存储各种格式的音频数据,不仅是存储非压缩的LPCM数据,还可以存储无损压缩的数据和有损压缩的数据,仅仅是在音频数据前添加一个短小的,包含元数据的文件头。比如,存储LPCM数据时,这个小的文件头包含有采样率,位深,大小端格式,通道数等metadata信息。因为WAV和AIFF被广泛的支持(因为是Windows和MacOS平台的主要格式),并且可以存储LPCM,因此他们用来存储和归档原始记录的合适文件格式。
BWF(广播波形格式)是由欧洲广播联盟(European Broadcasting Union)创建的标准音频格式,作为WAV的后继者。 除了其他增强功能之外,BWF还允许在文件中存储更强大的元数据。 这是电视和电影行业许多专业音频工作站使用的主要录音格式。 BWF文件包括标准化的时间戳参考,允许与单独的图像元素轻松同步。
6. 无损压缩音频文件格式
无损压缩格式以更小的空间存储数据而不损失任何信息。原始的非压缩数据可以通过其无损压缩的版本重新创建出来。
非压缩音频格式在单位时间内使用相同的比特数来编码声音片段以及静音片段。在无损压缩格式中,将使用更小的比特数来编码音乐片段,而对于静音片段,基本上不占任何空间。
常见的无损压缩格式有:FLAC(Free Lossless Audio Codec), WavPack, Monkey's Audio, ALAC (Apple Lossless)
能提供大约2:1的压缩比例,即只占原始的PCM文件一半的大小。发展无损压缩格式的目的是减少处理时间而又保持一个好的压缩比例。
7. 有损压缩音频文件格式
有损压缩通过移除一些音频信息,简化音频数据的方式来提供更大的压缩比,使得产生的音频文件更小。这种方式会降低音频质量,但是很多技术利用心理声学模型psychoacoustics来达到移除的音频信息的那一部分是对降低音频质量最小的部分,并且在处理过程中尽可能减少可听噪音的数量。(举个例子,人耳的听觉范围是20hz~20khz,那么移除20khz以上的高频部分,可以减少编码数据量的同时,人耳听不出差别)。
有损压缩格式中最著名的要数MP3 format, 但是 AAC format 在iTunes的音乐商店中也非常普遍. 大多数格式提供一系列压缩程度,通常以比特率来衡量。越低的比特率,产生的文件就越小,质量的损失也就越显著。
1. 内容来源
Wikipedia: Image file formats
2. 简介
图像文件格式 Image file formats 是组织和存储数字图像的标准化手段。 图像文件由未压缩,压缩的或矢量格式之一的数字化数据组成,可以光栅化以便在计算机显示器或打印机上使用。光栅化后,图像变为像素网格,每个像素都由一些比特位来表示,用于指定其颜色,且等于显示它的设备颜色深度。
3. 图像文件大小
光栅图像文件大小与图像中的像素数量和颜色深度(每像素所占比特数,bits per pixel)正相关。但是,图像可以以各种方式压缩。压缩算法以较小数量的字节存储原始图像的精确表示或近似,可以使用相应的解压缩算法将其解压回其未压缩形式。具有相同像素数和颜色深度的图像可能压缩后文件大小非常不一样。对于完全相同的压缩算法,两张同样像素数和颜色深度图片,由于压缩算法的性质,原始图像的不同图形复杂度也可能导致压缩后的文件大小非常不同。对于某些压缩格式,较不复杂的图像可能会导致较小的压缩文件大小。这种特性有时会使得使用无损压缩算法得到的文件大小比有损格式格式更小。例如,图形简单的图像(即具有大的连续区域的图像,如艺术线条或动画序列)可以无损压缩成GIF或PNG格式,并且导致比有损JPEG格式更小的文件大小。
例如: 一张分辨率位640 * 480 ,颜色位深为24-bit可能会占据近M字节的空间大小:
640 * 480 * 24 = 7,372,800 bits = 921,600 bytes = 900 kB
对于矢量图像,文件大小仅在添加更多矢量时增加.
4. 图像文件压缩
有两种类型的图像文件压缩算法:无损和有损。
无损压缩算法可减小文件大小,同时保留原始未压缩图像的完美副本。 无损压缩通常但不总是导致比有损压缩更大的文件(如3中论述的情况)。 应该在编辑图像时使用无损压缩,从而避免有损压缩的世代性降级。
有损压缩算法保留原始未压缩图像的表示,这可能看起来是完美的副本,但它不是完美的副本。 有损压缩通常能够实现比无损压缩更小的文件大小。 大多数有损压缩算法允许进行不同程度的压缩,可以得到不同文件大小和图像质量的图像文件。
5. 主要的图像文件格式
包括专有类型,有数百种图像文件类型。 PNG,JPEG和GIF格式最常用于在Internet上显示图像。 下面列出并简要描述了其中一些图形格式,分为两个主要的图形系列:光栅图像和矢量图像。
除了直接图像格式(光栅图像和矢量图像),Metafile格式是可移植格式,可以包括光栅和矢量信息,例如WMF和EMF,他们是应用程序无关的格式。 元文件格式是中间格式,大多数应用程序打开元文件,然后以本地格式保存它们。
光栅图像 Raster formats
在计算机图形学中,光栅图形或位图图像是点阵数据结构,其表示通常矩形的像素网格(颜色点),可通过监视器,纸张或其他显示介质查看。位图是一个矩形像素网格,每个像素的颜色由多个位指定。光栅在技术特征在于图像的宽度和高度(以像素为单位)和每像素的位数(或颜色深度,它决定了它可以表示的颜色数量)。打印将光栅图形视为连续色调,与连续色调相反的是“线条工作”,通常在数字系统中实现为矢量图形。矢量图像可以通过软件进行光栅化(转换为像素),并将光栅图像矢量化(光栅图像转换为矢量图形)。在这两种情况下,一些信息都会丢失。
GIF: GIF(Graphics Interchange Format) (图形交换格式)正常使用仅限于8位调色板,或256色(技术上可以使用24位颜色深度)。GIF最适合存储颜色很少的图形,例如简单的图形,形状,徽标和卡通风格的图像,因为它使用LZW无损压缩,当大区域有单一颜色时压缩效果比摄影或抖动的图像效率高很多。 由于GIF的简单性以及出现比较久,它获得了绝大多数软件支持。 由于其动画功能,它仍然广泛用于提供图像动画效果,尽管与现代视频格式相比压缩率低。
BMP:BMP文件格式(Windows位图)处理Microsoft Windows操作系统中的图形文件。 通常,BMP文件是未压缩的,因此大而无损; 它们的优点是结构简单,在Windows程序中广泛接受。
PNG:PNG(Portable Network Graphics) (可移植网络图形)文件格式是作为GIF的免费开源替代品创建的。 PNG文件格式支持8位调色板图像(所有调色板颜色可选透明)和24位真彩色(1600万种颜色)或48位真彩色,带或不带alpha通道 —— 而GIF仅支持256种颜色和单个透明颜色。与JPEG相比,当图像具有大而均匀着色的区域时,PNG表现优异。即使对于照片而言,由于其无损压缩,PNG仍然非常适合在编辑过程中存储图像,而JPEG通常作为照片编辑完成后最终保存的图像,因为其压缩技术通常会产生较小的文件大小。PNG为GIF提供了无专利的替代品(尽管GIF本身现在没有专利),也可以取代TIFF的许多常见用途。支持索引颜色,灰度和真彩色图像,以及可选的Alpha通道。 PNG可以存储伽玛和色度数据,以改善异构平台上的色彩匹配。PNG旨在在网络浏览器等在线查看应用程序中运行良好,并且可以使用渐进式显示选项进行完全流式处理。 PNG功能强大,可提供文件完整性检查和简单的常见传输错误检测。从PNG派生的动画格式是MNG和APNG。后者由Mozilla Firefox和Opera支持,并向后兼容PNG。
WebP:WebP是一种新的开放图像格式,它使用无损和有损压缩。 它是由谷歌设计的,旨在减少图像文件大小以加快网页加载速度:其主要目的是取代JPEG作为网络上照片的主要格式。 WebP基于VP8的帧内编码,并使用基于RIFF的容器。
矢量图像 Vector formats
矢量图形是根据2D点定义的计算机图形图像,它们通过线和曲线连接形成多边形和其他形状。这些点中的每一个在工作平面的x轴和y轴上具有确定的位置并确定路径的方向。此外,每个路径可以具有各种属性,包括笔划颜色,形状,曲线,厚度和填充的值。矢量图形现在通常以SVG,EPS和PDF图形文件格式存在,并且与JPEG,PNG,APNG,GIF和MPEG4的更常见的光栅图形文件格式本质上不同。
复合图像 Compound formats
这些是包含像素和矢量数据的格式,可能的其他数据,例如PDF的交互功能。
1. 内容来源
Wikipedia: Video file formats
2. 简介
视频文件格式是一种用于在计算机系统上存储数字视频数据的文件格式。视频几乎总是使用有损压缩来存储以减小文件大小。
视频文件通常是一个容器(例如Matroska格式),其包含视频编码格式(例如VP9)的视频数据以及音频编码格式(例如Opus)的音频数据。容器还可以包含同步信息,字幕和元数据(如标题)。标准化(或事实标准)的视频文件类型(例如.webm)是一个配置文件(profile),这个文件指定了容器格式及其可容纳的视频和音频压缩格式。视频文件容器内的编码视频和音频(不是文件头,文件尾和元数据)被称为本质。可以解码压缩视频或音频的程序(或硬件)称为编解码器。播放或编码视频文件有时需要用户安装与文件中使用的视频和音频编码类型相对应的编解码器库。
大致有两种视频文件封装设计:
非通用容器类型:通常可以根据文件扩展名暗示用户使用哪种应用程序去打开文件。某些视频文件格式就是这种情况,例如WebM(.webm),Windows Media Video(.wmv),Flash Video(.flv)和Ogg Video(.ogv),每种格式只能包含几个定义好的视频和音频编码格式子类型,使得相对容易知道哪个编解码器将播放该文件。
通用的容器类型:如AVI(.avi)和QuickTime(.mov)几乎可以包含任何格式的视频和音频,并且以容器类型命名文件扩展名,这使得用户很难根据文件扩展名来决定使用哪种编解码器或者应用程序来播放文件。
免费软件FFmpeg项目的库对视频文件格式的编码和解码具有非常广泛的支持。例如,Google使用ffmpeg支持YouTube的各种上传视频格式。使用ffmpeg库的一种广泛使用的媒体播放器是免费软件VLC媒体播放器,它可以播放用户遇到的大多数视频文件。
3. 常见的视频文件格式
Name | File extension(s) | Container format | Video coding format(s) | Audio coding format(s) | Notes |
---|---|---|---|---|---|
WebM | .webm | Matroska | VP8, VP9, AV1 | Vorbis, Opus | Royalty-free format created for HTML5 video. |
Matroska | .mkv | Matroska | any | any | |
Flash Video (FLV) | .flv | FLV | VP6, Sorenson Spark, Screen video, Screen video 2, H.264 | MP3, ADPCM, Nellymoser, Speex, AAC | Use of the H.264 and AAC compression formats in the FLV file format has some limitations and authors of Flash Player strongly encourage everyone to embrace the new standard F4V file format[2] de facto standard for web-based streaming video (over RTMP). |
F4V | .flv | MPEG-4 Part 12 | H.264 | MP3, AAC | Replacement for FLV. |
Vob | .vob | VOB | H.262/MPEG-2 Part 2 or MPEG-1 Part 2 | PCM, DTS, MPEG-1, Audio Layer II (MP2), or Dolby Digital (AC-3) | Files in VOB format have .vob filename extension and are typically stored in the VIDEO_TS folder at the root of a DVD. The VOB format is based on the MPEG program stream format. |
Ogg Video | .ogv, .ogg | Ogg | Theora, Dirac | Vorbis, FLAC | |
Dirac | .drc | ? | Dirac | ? | |
GIF | .gif | N/A | N/A | none | Simple animation, inefficient compression, no sound, widely supported |
Video alternative to GIF | .gifv | HTML | any | none | Not standardized, and not a real video file in the classical meaning since it merely references the real video file (e.g. a .webm file), which has to exist separately elsewhere. A .gifv "file" is simply a HTML webpage which includes a HTML5 video tag, where the video has no sound. As there were large communities online which create art using the medium of short soundless videos in GIF format, GIFV was created as a functionally similar replacement with vastly smaller filesizes than the inefficient GIF format. |
Multiple-image Network Graphics | .mng | N/A | N/A | none | Inefficient, not widely used. |
AVI | .avi | AVI | any | any | Uses RIFF |
MPEG Transport Stream | .MTS, .M2TS | AVCHD | AVCHD (MPEG-4 / H.264 ) | Dolby AC-3 or uncompressed linear PCM | The standard video format used by many Sony and Panasonic HD camcorders. It is also used for storing high definition video on Blu-ray discs. |
QuickTime File Format | .mov, .qt | QuickTime | many[3] | AAC, MP3, others[3] | |
Windows Media Video | .wmv | ASF | Windows Media Video, Windows Media Video Screen, Windows Media Video Image | Windows Media Audio, Sipro ACELP.net | |
Raw video format | .yuv | Further documentation needed | Doesn't apply | Doesn't apply | Supports all resolutions, sampling structures, and frame rates |
RealMedia (RM) | .rm | RealMedia | RealVideo | RealAudio | Made for RealPlayer |
RealMedia Variable Bitrate(RMVB) | .rmvb | RealMedia Variable Bitrate | RealVideo | RealAudio | Made for RealPlayer |
Advanced Systems Format(ASF) | .asf | ASF | any | any | |
AMV video format | .amv | Modified version of AVI[4] | Variant of Motion JPEG | Variant of IMA, ADPCM | Proprietary video file format produced for MP4 players and S1 MP3 players with video playback |
MPEG-4 Part 14(MP4) | .mp4, .m4p (with DRM), .m4v | MPEG-4 Part 12 | H.264, MPEG-4 Part 2, MPEG-2, MPEG-1 | Advanced Audio Coding, MP3, others | |
MPEG-1 | .mpg, .mp2, .mpeg, .mpe, .mpv | MPEG-1 part 1 | MPEG-1 part 2 | MPEG-1 Audio Layer I, MPEG-1 Audio Layer I, MPEG-1 Audio Layer III (MP3) | Old, but very widely used due to installed base. |
MPEG-2 – Video | .mpg, .mpeg, .m2v | ? | H.262 | AAC, MP3, MPEG-2 Part 3, others | |
M4V – (file format for videos for iPods and PlayStation Portables developed by Apple) | .m4v | MPEG-4 Part 12 | H.264 | AAC, Dolby Digital | Developed by Apple, used in iTunes. Very similar to MP4 format, but may optionally have DRM. |
SVI | .svi | MPEG-4 utilising a special header | ? | ? | Samsung video format for portable players |
3GPP | .3gp | MPEG-4 Part 12 | MPEG-4 Part 2, H.263, H.264 | AMR-NB, AMR-WB, AMR-WB+, AAC-LC, HE-AAC v1 or Enhanced aacPlus (HE-AAC v2) | Common video format for cell phones |
3GPP2 | .3g2 | MPEG-4 Part 12 | MPEG-4 Part 2, H.263, H.264 | AMR-NB, AMR-WB, AMR-WB+, AAC-LC, HE-AAC v1 or Enhanced aacPlus (HE-AAC v2), EVRC, SMV or VMR-WB | Common video format for cell phones |
Material Exchange Format(MXF) | .mxf | MXF | ? | ? | |
ROQ | .roq | ? | ? | ? | used by Quake 3[5] |
Nullsoft Streaming Video(NSV) | .nsv | NSV | ? | ? | For streaming video content over the Internet |
Flash Video (FLV) | .flv .f4v .f4p .f4a .f4b | Audio, video, text, data | Adobe Flash Platform | SWF, F4V, ISO base media file format | Developed by the Adobe Flash Platform |
先罗列下关键知识点:
1. 由苹果的QuickTime容器封装扩展而来
2. specification: ISO/IEC 14496-12 ISO/IEC 15444-12 二者相同
3. 通用的基于时间的多媒体文件格式,由于其网络协议无关性,因此能很好的支持各种网络协议。具有格式交换,管理,编辑,呈现等方面的功能。对于媒体呈现,既可以是本地文件,也可以通过网络或者是其他流传输机制。
4. 可扩展性,许多文件格式是iso base media file format的扩展,如mp4, 3gpp, f4v,DVB,iTunes,JPEG2000,mj2,QT(quicktime),Opus.
5 网站www.mp4ra.org可查,扩展格式可注册,注册权在苹果公司控制着。
也可以不注册:如f4v
6. 文件是面向对象设计,很容易解析为基础的对象 ,而文件中的基础对象都是在所谓的box或者是atom中,根据box的type就知道如何解析box
7. file type box 内涵了major_brand minor_brand compatible_brands根据前2者可以找到文件适用的specification,后者指出兼容的格式。
8. 支持媒体数据流化在网络上传播。主要通过hint track来实现
9. 鉴于ISO/IEC 14496-12重要性,3月5日开始为期一个月的specification学习。