最近使用了 OBS Studio 录制了视频,忽然发现自己是个菜鸡,后来了解了一下流媒体视频的相关知识。
一、视频
视频格式
通常,判断一个文件类型最直观的方式就是看该文件的后缀,例如 exe、sh、png、md 等等。
拿我们常见的 MP4, MOV, MKV, TS, FLV 以及微软的 WMV 来说,它们一般被称为 视频封装格式,或者说打包的格式。可以把它们理解成一个 container 或者说一个 压缩包,在这个容器或者包里可以放入视频帧、音频、元数据、字幕等信息。以下是一些常见的 container 介绍。
MKV:MKV 是一种非常灵活的容器,兼容 OBS Studio 支持的所有音频和视频编码器。它具有故障保护功能,即由于断电或其他原因导致的未完成录制仍可播放和恢复。不过,它在编辑软件中的支持度不高,在编辑软件中使用时可能需要重新复用。编辑软件支持不佳。
MP4/MOV:MP4 是互联网视频的事实标准。MOV 是其姊妹格式,在编解码器兼容性方面略有不同,主要用于 Mac 平台。MP4/MOV 需要对文件进行 "最终处理 "才能播放,如果写入过程因故中断,文件可能无法恢复。因此不建议直接录制成 MP4/MOV。编辑软件提供出色的支持。
片段式/分片 MP4/MOV:片段化是一种将 MP4/MOV 文件写成独立块的方法,这样文件就不需要最终处理就能使用,使其具有比 MKV 更高的兼容性,同时具有类似的抗错能力。当使用无损或未压缩音频时,可能需要重新复用才能在某些编辑套件中正常工作。编辑软件有很好的支持。
FLV:FLV 是 RTMP 中使用的容器。它对编解码器的支持非常有限(H.264/AAC),而且只支持单音轨。它的弹性与 MKV 相似,但很少得到编辑软件的支持。编辑软件支持不佳。
MPEG-TS/HLS (M3U8):MPEG-TS 用于各种流媒体协议,其恢复能力与 MKV 相似,但对编解码器的支持较少。在使用 HLS 时,视频是以单独的 .ts
文件加上播放列表的形式分段编写的,播放列表会指示播放器如何读取文件。这主要用于互联网流媒体。MPEG-TS 在编辑软件中得到了很好的支持,HLS 在编辑软件方面的支持很差甚至没有。
视频编解码器
视频编码器 可以简单理解成专门用来压缩视频的,而 解码器 正好相反。通常,一个视频若不经过编码器处理的话,视频的体积往往比较大,由于互联网的带宽限制,视频体积当然要越小越好,越利于网络传输。所以封装为指定的视频格式时都会采用一些技术算法进行压缩。同一种 视频格式可以使用 不同 的编解码器进行编解码。
常见的视频编解码器有以下几种:
AVC/H.264
AVC(Advanced Video Coding)一种用于视频会议的低比特率可视通信标准。H.264 由 MPEG 和 ITU-T VCEG 共同开发。H.264 一种基于 MPEG-4 的国际电信联盟视频压缩标准。H.264 非常流行,尤其适用于蓝光等高清视频。利用当今芯片的优势,H.264 可以压缩更大的帧尺寸。此外,还支持分辨率较低的 MPEG-2 质量,但数据传输率大大降低。
H.264 是 OBS 的默认编解码器。它的历史相当悠久(2004 年标准化),但在网络视频中无处不在,几乎可以在所有设备或软件上播放。对于大多数流媒体服务来说,它是目前唯一受支持的编解码器。同时大多数编辑软件都能提供出色的支持。
HEVC/H.265
HEVC(High Efficiency Video Coding) 国际电信联盟(ITU)和国际标准化组织(ISO)联合开发的超高清视频压缩标准。HEVC 也称为 H.265,支持 8K 分辨率。根据视频内容的不同,HEVC 能以 H.264/AVC 编码一半的比特率提供相同的视频质量,从而能以更少的带宽传输高质量视频,或以相同的带宽传输更高质量的视频。
H.264(2013 年标准化)的继承者,在相同比特率/文件大小的情况下提供更好的质量。不过,由于其许可协议限制较多,网络流媒体并未广泛支持或使用它。它仅通过 OBS Studio 中的硬件编码器(英伟达 NVENC、AMD AMF、英特尔 QSV、苹果 VT)支持。编辑软件有较好的支持。
AV1
AOMedia Video 1 开放媒体联盟(AOMedia)的一种视频编解码器。该联盟成立于 2015 年,AV1 于 2018 年首次发布。AV1 旨在取代 VP9 编解码器,成为 IETF 互联网视频编解码器(NETVC)标准。思科的 Thor 编解码器和 Xiph.Org 基金会的 Daala 编解码器的元素也包含在内。AV1 的主要竞争对手是 HEVC/H.265,与之相比,AV1 完全免收版权费,而且 AV1 的功能都经过仔细的专利侵权审查。
OBS Studio 支持的最新编解码器(2019 年标准化),与 HEVC 相比,质量/文件大小均有改善。软件编码可使用 SVT-AV1/libaom-av1,但需要高端 CPU 进行实时压缩。也可通过 AMD(RX 7000 系列)、NVIDIA(RTX 40 系列)和英特尔(Arc)最新 GPU 上的硬件编码器进行编码。编辑软件尚不支持。
SVT-AV1 是开源的 AV1 编解码器实现。英特尔和 Netflix 自2018年8月以来一直在就 SVT-AV1 编解码器框架进行合作。团队一直密切合作进行 SVT-AV1 的开发、交流架构决策;实施新工具并改善压缩效率。
ProRes
Apple 的编解码器,适用于不需要考虑文件大小的专业用途,可根据质量需求提供各种配置文件。通过 Mac 上的硬件和软件编码器提供支持。编辑软件有较好的支持。
Rate Control(速率控制):CBR、VBR、CQP
如果互联网是完美的,那么所有流媒体都可以使用 CQP(或者更好的:任何恒定质量模式,如 CRF 或 ICQ)。这些编码方法对每一帧都能产生相同的质量,与运动无关。在这种情况下,如果运动量大,则需要较高的比特率;如果运动量小,则需要较低的比特率。遗憾的是,比特率可变的数据流无法在互联网上完美传输。如果高动态场景的比特率升高,而接收方(用户)又有很多,发送方的连接可能会超载,每个接收方都会出现延迟或缓冲视频。每当一个接收器的带宽超过短时间的比特率峰值时,也会发生这种情况。
对于录制而言,基于质量的编码方式(VBR)效果更好,因为高运动场景的编码质量比 CBR 模式更好。当然,也可以将 CBR 的比特率提高到最高级别,这样就不会再看到差异,但这样做会浪费磁盘空间,因为低运动场景可以用更少的带宽(或空间)保存,而不会影响质量。
速率控制详解
-
CBR:恒定码率控制算法,用以恒定比特率流式传输或录制。质量由比特率决定。比特率越高,质量越好。
-
VBR:可变码率控制算法,用以实时、录制和可变比特率流式传输。根据 SDK 的描述,该算法符合 HRD 标准,可能可以很好地用于流式传输,尽管它不是严格的恒定比特率算法。质量由 2 比特率参数决定。比特率越高,质量越好。
-
CQP:常量化参数算法,用以可变比特率录制。无论运动如何,视频都以恒定的质量编码。比特率由视频材料的复杂性决定。质量由 QPI,QPP 和 QPB 参数决定。QPI 确定帧内质量(称为关键帧),QPP 确定预测 (P-) 帧质量,QPB 确定 h.264 B 帧(P 帧的较弱版本)。您希望对所有 3 个参数使用相同的值。非常适合原始素材的本地录制,因为如果您将比特率设置得足够高,质量不限于比特率,同时不会在低复杂场景中浪费磁盘空间。质量由 3 个 QP 参数 (1…51) 决定。值越低,质量越好,最终视频占用空间较大。最佳点可能在 20-25 左右。我的选择是 22,最大比特率为 50000,这导致平均比特率约为 29000,同时保持最高质量的高复杂场景。低于 22 的值会大大增加比特率要求。并非在每个高清显卡中都可用。
-
AVBR:平均可变比特率控制算法,用以可变比特率录制。质量由比特率决定。比特率越高,质量越好。允许高复杂度短场景的比特率消耗峰值,以保持质量。高复杂度场景的质量由精度和收敛参数决定。这对于像 VBR 算法(不符合 HRD 标准)这样的流媒体来说不够稳定。该算法并非在每个高清显卡中都可用。
-
LA(VBR):具有前瞻性的 VBR 算法(VBR 升级版),用以可变比特率录制。VBR 算法的更好版本。质量改进了 VBR。由于在实际编码之前对几十帧进行了大量分析,因此延迟巨大,内存消耗增加。质量由比特率和预视深度 (1…100) 决定。比特率越高,质量越好。LA 值为 0 时,SDK 为默认值。该算法并非在每个高清显卡中都可用。
-
ICQ:智能恒定质量算法,用以可变比特率录制。CQP 模式的更好版本。以恒定的质量录制,类似于x.264的CRF模式,比CQP模式更好地使用带宽。质量由 ICQQuality 参数 (1…51) 确定,其中 1 对应于最佳质量。ICQQuality 的理智值可能在 20…25 左右,就像在 CQP 模式下一样。该算法并非在每个高清显卡中都可用。
-
VCM:视频会议模式,用以视频会议。可能是低延迟、低比特率要求、低质量。我没有找到有关此模式的任何详细信息,但它可能不适合高质量的流媒体或录制,但专注于低带宽使用和数据流的稳健性。并非在每个高清显卡中都可用。
-
LA ICQ:具有前瞻性的智能恒定质量算法,用以可变比特率录制。与 LA (VBR) 相同的质量改进和注意事项,但适用于 ICQ 算法。可能是最好的质量,同时消耗所有可用算法中最少的带宽 - 如果您的 CPU 支持它。质量由 ICQQuality 参数 (1…51) 和前瞻深度 (1…100) 确定,其中 1 对应于最佳质量。“前瞻”越大,质量越好,其中 0 表示 SDK 默认值。ICQQuality 的理智值可能在 20…25 左右,就像在 CQP 模式下一样。该算法并非在每个高清显卡中都可用。
OBS 论坛有大佬给出的推荐顺序是:
LA ICQ -> ICQ -> CQP -> LA (VBR) -> AVBR -> VBR -> CBR
视频画面比例
常见的竖屏画面比例为 4:3;横屏为 16:9、18:9、21:9,横向数字越大,上下的黑边越宽。还有其它各种稀奇古怪的比例,就不详细讲解了,可以观看视频:
如果什么都不懂,建议导出竖屏时 4:3,横屏时 16:9,这些硬件支持较好。
总结
直播推荐采用 VBR,录制视频推荐使用 CBR 10000 kbs(1080 ~ 2K),当然也可以考虑使用 VBR。如果对自己的硬件有信心,还可以适当上升码率。
至于视频的编码,如果硬件支持 AV1 可以考虑使用 AV1,如果不支持就采用主流的 .H264 等,这个根据自己的硬件采取不同的方式。
如果直播的是游戏,那么须配置独显,否则自己玩游戏都会卡。一般的核显可以直播教学等视频,选择 VBR 并保持 6000 kbs 的码率即可有不错的效果。
视频最终的质量由 编码 + 码率 决定。一般互联网视频推荐 .H264 编码封装为 MP4 的格式,不过开源的 AV1 正在普及中,浪子更推荐使用。
码率越大,视频体积越大。
二、音频
音频编解码器
AAC:与 H.264 一样,AAC 的历史也相当悠久(1997 年),但支持范围非常广泛,在典型比特率下仍能提供不错的质量。几乎所有流媒体服务都使用这种编解码器。编辑软件提供出色的支持。
Opus:比 AAC(2012 年)的编解码器更新、质量更高,并且免费授权。它的质量更高,但兼容性更差。编辑软件提供一般支持。
FLAC:无损编解码器,免费授权,广泛用于音乐,但不太支持视频文件。编辑软件提供一般支持。
ALAC:苹果公司的无损音频编解码器,在 MOV/MP4 和编辑软件中得到很好的支持。编辑软件有较好的支持。
PCM:无压缩音频,包括 32 位浮点录音支持,使编辑更加灵活。编辑软件提供出色的支持。
三、音/视频格式与编解码器的兼容性
视频编解码器与音频编解码器的兼容性
编解码器 | H.264 | HEVC | AV1 | ProRes |
---|---|---|---|---|
AAC | Any | MP4, MOV, MKV, TS | MP4, MKV | MOV, MKV |
ALAC | MP4, MOV, MKV | MP4, MOV, MKV | MP4, MKV | MOV, MKV |
FLAC | MP4, MKV | MP4, MKV | MP4, MKV | MKV |
Opus | MP4, MKV, TS | MP4, MKV, TS | MP4, MKV | MKV |
PCM | MOV, MKV | MOV, MKV | MKV | MOV, MKV |
- 表格横向为视频编解码器,纵向为音频编解码器;
- TS 包括 m3u8(HLS);
视频格式与其编解码器的支持
container | H.264 | HEVC | AV1 | ProRes |
---|---|---|---|---|
FLV | ✅ | ❌ | ❌ | ❌ |
MP4 | ✅ | ✅ | ✅ | ❌ |
MOV | ✅ | ✅ | ❌ | ✅ |
MKV | ✅ | ✅ | ✅ | ✅ |
M3U8 (HLS) | ✅ | ✅ | ❌ | ❌ |
TS | ✅ | ✅ | ❌ | ❌ |
MPEG-TS 中的 AV1 正在标准化,一旦最终确定,它将可用于 TS 和 HLS 输出。
音频格式与编解码器的兼容性支持
container | AAC | ALAC | FLAC | Opus | PCM |
---|---|---|---|---|---|
FLV | ✅ | ❌ | ❌ | ❌ | ❌ |
MP4 | ✅ | ✅ | ✅ | ✅ | ❌ |
MOV | ✅ | ✅ | ❌ | ❌ | ✅ |
MKV | ✅ | ✅ | ✅ | ✅ | ✅ |
M3U8 (HLS) | ✅ | ❌ | ❌ | ✅ | ❌ |
TS | ✅ | ❌ | ❌ | ✅ | ❌ |
MP4 中的 PCM 是标准化的,但 FFmpeg 和 OBS Studio 尚不支持。