图片与视频编码
传统的常见的图片格式有 BMP、PNG、JPEG、SVG、GIF 等,这里面 BMP 为位图,SVG 是矢量图像格式,GIF 是一种动态图像格式,PNG 是一种无损压缩图片格式,JPEG 是一种有损压缩图片格式。
JPEG 或称 JPG 可以说是最流行和常见的有损压缩图片格式,根据 w3techs.com 的统计,世界上 75.7% 的网页使用 JPEG 格式的图片。它由联合图像专家小组(Joint Photographic Experts Group)于 1992 年发布,距今已经三十多年。
不过这并不代表着我们平常遇见的有损压缩图片格式就只有 JPEG 一种,例如当你使用 iPhone 拍摄照片导出时,有时会导出 HEIC 格式的文件;从某些网站上保存图片时,你会看到 WebP 格式的图片,甚至是 AVIF 格式的图片,如果你由所了解,还会听说过 JPEG 2000、JPEG XR、JPEG XL 等格式。
在这些格式中,最流行的是占有如今 13.9% 网页份额的有损压缩图片格式 WebP,它由 Google 在 2010 年推出,支持透明度和动画。
是的,动画,因此WebP 也可以代替 GIF。除此之外 APNG 也可以代替 GIF,但是 GIF 由于其广泛的支持,仍然是很多人的选择。
WebP 如其名字所揭示的一样,是面向 Web 的图片格式,它的压缩率比 JPEG 更高。互联网上每天传输大量的图片,这些图片很多会托管在静态资源服务器上,使用 WebP 可以减小图片的大小,从而减小服务器的负担。如果你有过搭建网站的经历,你可能会发现,很多服务提供商都会提供 WebP 格式的图片转换服务
这似乎是皆大欢喜的选择,server 节省了带宽,用户节省了流量,但是 WebP 却并没有因此一统江湖,实际上,webP 过去一直有一个很大的兼容性问题,Chrome 和 Opera 自 2014 年就完全支持 WebP,但是 Edge 、Firefox 直到 2018 年左右才完全支持 WebP,而且,在苹果设备上的Safari 要到 2022 年才算完全支持 WebP,所以,一直要到两三年前,WebP 才算是普及,截至2024年,已有 97% 的浏览器支持此格式。
作为 Google 的 VP8 视频格式的衍生物,WebP 是 WebM 多媒体容器格式的姊妹项目。
既然提到了视频编码格式,让我们来看影视飓风 10 月 8 日发布的视频《清晰度不如 4 年前!视频变糊是你的错觉吗》?
哎呀,这个视频全网下架了。
如果你留心注意过 B 站的视频编码设置,就可以看到三种选项:AV1、HEVC / H.265、AVC / H.264。
AVC (Advanced Video Coding) 又称 H.264 或 MPEG-4 Part 10,是一种基于块导向、运动补偿编码的视频压缩标准。截至 2019 年 9 月,它是迄今为止最常用的视频内容录制、压缩和分发格式,被 91% 的视频行业开发者使用。它支持最大 8K UHD 的分辨率,但是主要为 8 位而设计,因此在保真度上不如后来的 HEVC。
HEVC ,又称 H.265 或 MPEG-H Part 2,是 AVC 的继任者,它提供了比 AVC 更好的数据压缩,在相同比特率下提供更好的视频质量。它支持最大 8K UHD 的分辨率,并且与主要为 8 位的 AVC 不同,HEVC 的更高保真度的 Main 10 profile 已经被几乎所有支持硬件所采用。
就像 WebP 是 VP8 的衍生物一样,在 iOS 中常见的 HEIF 图片格式也是 HEVC 的衍生物,HEIF 是一种基于 HEVC 的图片格式,它的压缩算法比 JPEG 更高效,因此可以减小图片的大小。在 iOS 11 中,苹果开始使用 HEIF 格式来保存照片。不过,在浏览器上,目前只有 Safari 和 Safari for iOS 支持 HEIF 格式。
既然更好,为什么不用呢?一方面,HEVC 的实现更复杂,另一方面,HEVC 的专利费用要比 AVC 贵不少。对于用户的直观感受的话就是,比如,在 Windows 中,HEVC 编码器需要额外在 Microsoft Store 中花 7 块钱购买。
2010 年,Google 以约 1.246 亿美元的价格收购了 On2 Technologies,当然也包括了 On2 的 VP8 技术。VP8 成为了 Google 的 WebM 视频文件格式的核心,同一年,Google 将 libvpx ( 1 个VP8 的实现) 以 BSD Licnese 开源。2013 年推出了 继任者 VP9
Alliance for Open Media (AOMedia) 成立于 2015 年,现在的成员包括了 Amazon、Apple、ARM、Cisco、Google、华为、Intel、Meta Platforms、Microsoft、Mozilla、Netflix、Nvidia、三星和腾讯。AOMedia 的目标是开发开放、免版税的多媒体技术,以替代 MPEG 的标准,AOMedia 的一个项目就是 AV1 视频编码格式。
作为 VP9 的继任者,AV1 同时还吸取了 Daala、Thor 和 VP10 三种开放编码的技术,是一种开放、免版税的视频编码格式。2018 年 Facebook 进行了一项测试,AV1 参考编码器的数据压缩比 libvpx-vp9、x264 High profile 和 x264 Main profile 分别高出 34%、46.2% 和 50.3%。
同样的,AVIF 是一种基于 AV1 的图片格式,在 2024 年的今天,虽然 AVIF 还没有像 WebP 那样普及,但是它基本上已经被所有主流浏览器支持了。
值得一提的是,AVIF 支持 Animated AVIF,也就是说,可以承载动图。
既然更好,为什么不用呢?因为由于技术较新,硬件解码的支持也是一个问题,比如,H.264 是几乎所有设备都支持的,HEVC 是大部分设备支持的,AV1 是少部分设备支持的。
如果你的设备不支持硬解,那么就只能使用软解 (软解码),软解码是指通过软件来解码视频,而硬解码是指通过硬件来解码视频。
软解,尤其是在手机上,是非常耗电的,所以如果你的设备不支持硬解 AV1,那么你可能会发现看 AV1 编码的视频会比 H.264 编码的视频更耗电。
不过既然这样,相同网速下的视频一定是越先进越看起来越清晰吧?实际上并不一定,比如在 B 站上某些时候,最旧的 H.264 编码的视频反而可能观看体验要比更新的 HEVC 或 AV1 编码的视频更好。
举个不恰当的例子就是,HEVC / AV1 能够达到 AVC 两倍的压缩率,但如果你把大小压缩到相同AVC视频编码的 三分之一大小,那么自然 AVC 编码的视频会好些。
更多的相关话题请看文章 谁也成为不了中国的 YouTube,这里就此打住
WebP、HEIC、AVIF 并不是全部的想要取代 JPEG 和 H.264 的格式,实际上,JPEG 组织自身也打算推出 JPEG 的后继者。JPEG 之前推出的继任者都失败了,无论是苹果大力支持的 JPEG 2000(甚至让对图片格式支持极其保守的 Safari 内置了支持 😅) ,还是微软大力支持的 JPEG XR 都没能流行起来,而 JPEG XL 让人看到了希望…吗?2022 年 Google 表示准备在 Chrome 110 中移除对 JPEG-XL 图像格式的实验性支持,而苹果在 WWDC23 上表示 Safari 将支持 JPEG XL。
JPEG XL 是 JPEG 组织推出的新一代图片格式,它是一种同时支持有损和无损压缩的图片格式。
WebP2 是 WebP 的升级版,目前还在开发中。
来看另一个新闻:vivo 官方宣布了一项新的手机功能,多款机型将可以将 Live 图发布至小红书。这一功能的推出,将为用户带来更加便捷和丰富的拍照体验。
几个月前也有类似的新闻,OPPO Reno 12 宣传其将会是安卓平台上第一款支持 Live Photo 发布的手机。
让我们先来看看 Live Photo 是什么。苹果官方介绍是:Live Photo 是一种可以捕捉拍摄前后 1.5 秒动态的照片格式。底层的实现可以理解为:Live Photo 由两个文件组成,一个是 HEIC 或 JPEG 格式的照片,另一个是 MOV 格式的视频。当你拍摄 Live Photo 时,实际上是同时拍摄了照片和视频。当你在手机上查看 Live Photo 时,实际上是播放了视频。当你在微信或小红书中分享 Live Photo 时,实际上是同时分享了照片和视频。
安卓平台各种厂商的实现方式不尽相同。以 MIUI 为例,MIUI 的实况照片文件会命名为 MVIMG_YYYYMMDD_HHMMSS.jpg,这是由 Google 推出的 Motion Photo format 1.0 标准。
Motion Photo 文件由一个主要的静态图像文件(JPEG、HEIC 或 AVIF)和一个附加的视频文件组成。主要图像包含了描述如何显示静态图像文件和视频文件内容的 Camera XMP 元数据,以及描述如何定位视频文件内容的 Container XMP 元数据。
简单来说,这种格式在一个文件里,前半截存储照片,后半截存储视频,通过在文件头部添加一些标志和偏移量,就可以让支持的软件识别出这是一个实况照片。