基础学习:视频文件格式、视频编码格式

写在前面

起初,是因为在掘金社区中刷到一篇文章,结合实际涉及业务,认为还是有必要补一补相关知识,故仅以此篇文章做学习笔记~
掘金文章:通过调试技术,我理清了 b 站视频播放很快的原理open in new window,因为实际业务中存在播放音视频,以及视频源防下载分片处理(.mp4 -> .m3u8),尽管可以使用一些插件或其他工具仍然可以下载到原视频,但此种方式已经规避掉大部分普通用户,及业务场景的盗版传播问题。
而对于文章中所提到的 .m4s 格式不甚了解,感到好奇之余,便通过谷歌检索到另一个网站:FileFormatopen in new window。而在看到这个网站之后,觉得其中许多内容是需要去了解学习的,遂分享到一个 chokcocoopen in new window 大佬的技术交流群内,得到 Rexopen in new window 大佬给予了部分讲解。以下是相关截图: fileFormat01fileFormat02 通过更多的检索内容和资料查找,学习加以记录,有了以下内容,(部分截图来源于学习过程中使用到的网站或软件)

视频文件格式

fileFormat03 其中计算机系统中扩展名后缀,便是所谓的文件格式,而视频格式我主要查阅了以下实际业务中涉及到的几种类型:

MP4(MPEG-4 Part-14)

  • MP4或称MPEG-4第14部分(英语:MPEG-4 Part 14)是一种标准的数字多媒体容器格式。
  • MPEG-4第14部分的扩展名为.mp4,支持各种媒体,以存储数字音频及数字视频为主,但也可以存储字幕和静止图像。

MOV(Apple QuickTime Movie)

  • MOV是Apple开发的一种格式,用于电影和其他视频数据存储。它兼容Windows和Mac。
  • 但是,Windows Media Player只能打开该格式的早期版本。如果您有2.0及更高版本,则需要Apple QuickTime Player,或者您可以将其转换为与您的播放器兼容的其他格式。

MKV(Matroska Multimedia Container)

  • 发起于2002年12月6日,派生自多媒体封装格式(英语:MCF, Multimedia Container Format)的一种开放源代码的多媒体封装格式。
  • 可以包含使用不同编解码器压缩的媒体数据。
  • 它比传统的AVI容器有很多优点:它可以包含不同语言的音轨和字幕,可以在不停止播放的情况下进行切换,文件搜索和倒带非常快。此格式也易于编辑,这就是为什么可以毫不费力地提取音频和视频数据的原因。

WebM(WEB Media)

  • WebM是一个开放式媒体容器,媒体使用VP8视频编解码器和Vorbis音频编解码器进行压缩。
  • WebM格式具有很高的视频播放质量和数据压缩参数。该格式广泛用于将媒体放置到网页上,并得到所有现代网络浏览器的支持,如Opera,Mozilla Firefox和Google Chrome。
  • 将WebM视频嵌入到网站页面可以实现没有延迟和错误。
  • WebM旨在替代h.264标准,扩展程序的版权由Google持有。

AVI(Audio Video Interleave)

  • AVI是一个多媒体容器,在PC和Mac用户中非常受欢迎,该格式由Microsoft于1992年开发。
  • 通常AVI用作视频格式,但与当时的其他格式不同,AVI可能包含使用不同编解码器组合压缩的音频和视频数据。更常见的是像DivX和XVID这样的视频编解码器与.avi文件一起使用。对于音频播放,使用诸如MP3,AC3和PCM之类的编解码器。可以使用Windows Media Player或其他类似程序播放AVI文件。

FLV(FLash Video)

  • FLV是一个Flash视频容器,用于存储音频,视频和其他数据的流行托管网站。
  • 它通常使用h.264或h.263编解码器进行视频存储,使用MP3进行音频处理。
  • Windows和Mac操作系统有很多程序可以打开.flv文件。
  • 之后由于Flash存在大量耗电及信息安全等问题,各大平台开始逐步转换成HTML5形式,中国视频网站哔哩哔哩为了减少迁移至HTML5成本而开发了flv.js,可以通过浏览器支持的Media Source Extension播放FLV文件格式中的H.264和AAC编码内容,所以如今Chrome、Edge等浏览器仍然可以收看来自BiliBili的视频。
  • 2020年12月31日,Chrome作为最后一个宣布将不再支持使用Flash的应用程序浏览器,flv视频均无法透过Google Chrome收看,除开BiliBili、优酷等视频网站以外的视频网站均停止使用flv作为视频格式。

RMVB(RealMedia Variable Bitrate)

  • RMVB是由RealNetworks开发的具有可变比特率的格式。实际上它是RM格式的改进版本,为难以压缩的视频提供更大的带宽。此格式保持高视频定义。
  • RMVB文件在亚洲非常受欢迎,但并非所有流行播放器都支持它们,因此最简单的播放方式是将它们转换为另一种最常见的格式。

WMV(Windows Media Video)

  • 高级系统格式 (ASF) 是一种数字多媒体容器,主要用于存储和传输媒体流。
  • Microsoft Windows Media Video (WMV) 是压缩视频格式,Microsoft Windows Media Audio (WMA) 是压缩音频格式以及 Microsoft 开发的 ASF 容器中的其他元数据。
  • 一旦使用 Windows Media Video 和 Windows Media Audio 编解码器对 WMV 或 WMA 文件进行编码,它们就会以 .asf 扩展名表示。
  • WMV 压缩大文件以获得更好的网络传输速率,同时保持视频质量。
  • WMV 专为在所有 Windows 设备上运行而设计,在电影和电视工程师协会 (SMPTE) 标准化之后,WMV 现在被认为是一种开放的标准格式。

封装格式(Format)? 多媒体容器(Multimedia Container)?

在总结的时候,发现各平台中或资料内对于以上格式的叫法,既有封装格式,也有多媒体容器。好吧~他俩其实是一个东西,在我疑问他俩的区别时,阿里云-点播服务中的相关文档内有这样一句话:
封装格式(Format),也称多媒体容器(Multimedia Container),是将已编码压缩好的视频轨道、音频轨道和元数据(视频基本信息如标题、字幕等)按照一定的格式规范,打包放到一个文件中,形成特定文件格式的视频文件。


视频编码格式

fileFormat04fileFormat05fileFormat06 截图来自于使用 HandBrake 软件,在预设为General Fast 1080p30时,其中视频编码 Video Encoder 可提供的选项可以概括为:H.264、H.265、MPEG-4、MPEG-2,而当预设更改为 MKV时,其中视频编码 Video Encoder 提供了额外的 3 个选项:VP8、VP9、Theora

H.264(MPEG-4 AVC)

  • H.264,又称为MPEG-4第10部分,高级视频编码(英语:MPEG-4 Part 10, Advanced Video Coding,缩写为MPEG-4 AVC)是一种面向块,基于运动补偿的视频编码标准 。
  • 到2014年,它已经成为高精度视频录制、压缩和发布的最常用格式之一。H.264因其是蓝光盘的其中一种编解码标准而著名,所有蓝光盘播放器都必须能解码H.264。
  • 它也被广泛用于网络流媒体数据如Vimeo、YouTube、以及iTunes Store,网络软件如Adobe Flash Player和Microsoft Silverlight,以及各种高清晰度电视地面电视(DVB-T、DVB-T2)、有线电视(DVB-C)以及卫星(DVB-S和DVB-S2)。

H.265(High Efficiency Video Coding)

  • H.265,又称为H.265和MPEG-H第2部分,高效率视频编码(High Efficiency Video Coding,简称HEVC)是一种视频压缩标准,或视为是ITU-T H.264/MPEG-4 AVC标准的继任者。
  • 2004年开始由ISO/IEC Moving Picture Experts Group(MPEG)和ITU-T Video Coding Experts Group(VCEG)作为ISO/IEC 23008-2 MPEG-H Part 2或称作ITU-T H.265开始制定。第一版的HEVC/H.265视频压缩标准在2013年4月13日获接受为国际电信联盟(ITU-T)的正式标准。
  • HEVC获认为不仅提升影像质量,同时也能达到H.264/MPEG-4 AVC两倍之压缩率(等同于同样画面质量下比特率减少到了50%),可支持4K清晰度甚至到超高清电视(UHDTV),最高清晰度可达到8192×4320(8K清晰度)。

MPEG-4

  • MPEG-4是一套用于音频、视频信息的压缩编码标准,由国际标准化组织(ISO)和国际电工委员会(IEC)下属的“动态影像专家组”(Moving Picture Experts Group,即MPEG)制定,第一版在1998年10月通过,第二版在1999年12月通过。MPEG-4格式的主要用途在于网络上流、光盘、语音发送(视频电话),以及电视广播。
  • MPEG-4 是一个由若干子标准(part)组成的, 仍在不断演化的标准. 各个公司产品所宣传的和 MPEG-4 兼容往往没有明确的说明到底和哪些子标准兼容. 最重要的子标准是 MPEG-4 Part 2 和 MPEG-4 Part 10.
  • 由于MPEG-4是一个公开的平台,各公司、机构均可以根据MPEG-4标准开发不同的制式,因此市场上出现了很多基于MPEG-4技术的视频格式,例如WMV 9、Quick Time、DivX、Xvid等。MPEG-4大部分功能都留待开发者决定采用是否。这意味着整个格式的功能不一定被某个程序所完全函括。因此,这个格式有所谓配置(profile)及级别(level),定义了MPEG-4应用于不同平台时的功能集合。
MPEG-4 分部(子标准)

第一部分(ISO/IEC 14496-1):系统:描述视频和音频数据流的控制、同步以及混合方式(即混流Multiplexing,简写为MUX)。

第二部分(ISO/IEC 14496-2):视频:定义一个对各种视觉信息(包括自然视频、静止纹理、计算机合成图形等等)的编解码器。(例如XviD编码就属于MPEG-4 Part 2)

第三部分(ISO/IEC 14496-3):音频:定义一个对各种音频信号进行编码的编解码器的集合。包括高级音频编码(Advanced Audio Coding,缩写为AAC)的若干变形和其他一些音频/语音编码工具(如Audio Lossless Coding,缩写为ALS)。

第四部分(ISO/IEC 14496-4):一致性:定义对本标准其他的部分进行一致性测试的程序。

第五部分(ISO/IEC 14496-5):参考软件:提供用于演示功能和说明本标准其他部分功能的软件。

第六部分(ISO/IEC 14496-6):多媒体传输集成框架(DMIF for Delivery Multimedia Integration Framework)

第七部分(ISO/IEC 14496-7):优化的参考软件:提供对实现进行优化的例子(这里的实现指的是第五部分)。

第八部分(ISO/IEC 14496-8):在IP网络上传输:定义在IP网络上传输MPEG-4内容的方式。

第九部分(ISO/IEC 14496-9):参考硬件:提供用于演示怎样在硬件上实现本标准其他部分功能的硬件设计方案。

第十部分(ISO/IEC 14496-10):高级视频编码或称高级视频编码(Advanced Video Coding,缩写为AVC):定义一个视频编解码器(codec)。AVC和XviD都属于MPEG-4编码,但由于AVC属于MPEG-4 Part 10,在技术特性上比属于MPEG-4 Part2的XviD要先进。另外,它和ITU-T H.264标准是一致的,故又称为H.264。

第十二部分(ISO/IEC 14496-12):基于ISO的媒体文件格式:定义一个存储媒体内容的文件格式。

第十三部分(ISO/IEC 14496-13):知识产权管理和保护(IPMP for Intellectual Property Management and Protection)拓展。

第十四部分(ISO/IEC 14496-14):MPEG-4(即MP4)文件格式:定义基于第十二部分的用于存储MPEG-4内容的视频文档格式。

第十五部分(ISO/IEC 14496-15):AVC文件格式:定义基于第十二部分的用于存储第十部分的视频内容的文件格式。

第十六部分(ISO/IEC 14496-16):动画框架扩展(AFX : Animation Framework eXtension)。

第十七部分(ISO/IEC 14496-17):同步文本字幕格式。

第十八部分(ISO/IEC 14496-18):字体压缩和流式传输(针对开放字体格式Open Font Format)。

第十九部分(ISO/IEC 14496-19):合成材质流(Synthesized Texture Stream)。

第二十部分(ISO/IEC 14496-20):简单场景表示(LASeR for Lightweight Scene Representation。

第二十一部分(ISO/IEC 14496-21):用于描绘(Rendering)的MPEG-J拓展。

第二十二部分(ISO/IEC 14496-22):开放字体格式(Open Font Format)。

第二十三部分(ISO/IEC 14496-23):符号化音乐表示(Symbolic Music Representation)。

第二十四部分(ISO/IEC 14496-24):音频与系统交互作用(Audio and systems interaction)。

第二十五部分(ISO/IEC 14496-25):3D图形压缩模型(3D Graphics Compression Model)。

第二十六部分(ISO/IEC 14496-26):音频一致性检查:定义测试音频数据与ISO/IEC 14496-3是否一致的方法(Audio conformance)。

第二十七部分(ISO/IEC 14496-27):3D图形一致性检查:定义测试3D图形数据与ISO/IEC 14496-11:2005, ISO/IEC 14496-16:2006, ISO/IEC 14496-21:2006,和ISO/IEC 14496-25:2009是否一致的方法(3D Graphics conformance)。

MPEG-2

  • MPEG-2是“运动图像和相关音频信息的通用编码”的标准。
  • 它用了有损视频压缩和有损音频数据压缩方法的组合,允许使用当前可用的存储媒体和传输带宽存储和传输电影。
  • 虽然MPEG-2的效率不如H.264/AVC和H.265/HEVC等新标准,但与现有硬件和软件的向后兼容性意味着它仍在广泛使用,例如在无线数字电视广播和DVD-Video中。

VP8

  • VP8是一个开放的影像压缩格式,最早由On2 Technologies开发,随后由Google发布。
  • 同时Google也发布了VP8编码的实现函式库:libvpx,以BSD授权条款的方式发行,随后也附加了专利使用权。
  • 而在经过一些争论之后,最终VP8的授权确认为一个开放源代码授权。因为 Google 已在免版税的公共许可下发布了所有 VP8 专利。几乎 90% 或更多的 WebRTC 视频会话使用 VP8。
  • 目前支持VP8的网页浏览器有Opera、Firefox和Chrome。

VP9

  • VP9是谷歌公司为了替换老旧的VP8影像编码格式并与动态专家图像组(MPEG)主导的高效率视频编码(H.265/HEVC)竞争所开发的免费、开源的影像编码格式。
  • VP9主要被用于Google旗下著名的影音分享网站YouTube。VP9一般与Opus音频编码一起以WebM格式封装。
  • 相比于高效率视频编码,许多浏览器都支持VP9视频格式,截止2018年6月,约有4/5的浏览器(包括移动设备)支持WebM封装容器和VP9视频编码,例如Chromium、Chrome、Microsoft Edge、Firefox、Opera等浏览器都内置了VP9解码器,可在HTML5播放器中播放VP9影像格式。Windows 10操作系统也内置了WebM分离器和VP9解码器,随着 Apple 宣布 tvOS 14 将支持 VP9,由于同源的关系 iOS/iPadOS 14 及 macOS Big Sur 下的 Safari 也终于支持了 VP9。
  • Google持有VP9视频格式的部分专利,但Google保证在互惠的条件下(例如用户避免参与专利诉讼)可免费使用。

视频转码

大致对与视频文件格式和视频编码格式有个基础的了解,不去深究的话,至少能知道文件详细信息中 编解码器 对应的参数是啥意思了~

而在实际业务过程中遇到很奇怪的问题,即出现个部分视频在很旧的测试设备中无法播放,遂联系了视频转码服务的提供商,进行了解决。为什么会播放不了呢? 视频编码格式对于设备的支持性大同小异,而比较新或比较高级的编码格式,对于设备的兼容性则没有那么好~此时则需要进行转码,而转码的原理就是将 原视频进行先解码,再编码后输出到容器内(Maybe 不太准确的表述),还是看一下 FFmpeg 官网里的示意
fileFormat08

fileFormat07 上图是通过HandBrake软件操作后,导出视频的一些配置信息,通过 Tracks 可以看出,最终导出的视频为 H.264 编码格式、60FPS、AAC(音频编码格式)、Stereo(立体声道) fileFormat09 上图所示是 HandBrake 软件中对于音频轨道内的一些参数修改,涉及到一些音频视频格式、音频编码格式等相关的一些技术信息,之后再利用时间去找找资料看看吧~

写在最后

文章内容浅显,仅用作笔记~不得不说,无论是 FFmpeg、HandBrake、IINA播放器,对于音视频这块的技术,实现的功能,都是非常厉害的,而涉及音视频开发相关的内容也是相对比较多的,笔记内容仅用作一次发现大佬文章后的读后感,并激起了一些兴趣去了解和学习相关的知识。关于更多专业的编码、轨道、帧率等等知识,还需要看更专业的文章进行学习~

参考资料

最近更新时间: