• 视频编码技术史
    • 为什么需要编码
    • 传输技术/显示技术
    • 有线电视时代
      • 广播电视制式
    • 数字电视时代
      • VCD/DVD
    • 互联网流媒体时代
  • 视频编码理论
    • 帧内压缩
    • 帧间压缩
    • 音频压缩
    • 封装
    • 帧率/分辨率/场
    • 码率/VBR
    • 色域/动态范围
  • 视频编码算法与实现
    • RGB/YUV/YCbCr
    • H.264/AVC
    • H.265/HEVC
    • x264/x265
    • MPEG-4/MKV
    • ffmpeg
    • AV1/dav1d
    • NVENC/QSV
    • 小丸工具箱/StaxRip
    • Adobe ME/Voukoder
  • 扩展内容
    • 流式视频传输
      • 什么是流式视频传输
      • FLV
      • HLS
    • WebRTC

参考文献:


视频编码技术史

为什么需要编码

视频编码技术的发展主要是为了解决未压缩视频数据量巨大的问题。例如,720p分辨率、30fps的视频每分钟需要约4.63GB的存储空间。通过编码技术去除空间和时间上的冗余信息,可以显著减少数据量,从而降低存储和传输成本。编码技术使得视频可以在有限的带宽上高效传输,满足不同质量的需求,提升了用户体验。

传输技术/显示技术

视频传输技术的发展与显示技术的紧密相关。从模拟信号到数字信号的转变,以及显示技术从CRT到LCD、OLED的进步,都为视频编码提供了新的可能性。现代显示技术能够支持更高的分辨率和动态范围,对视频编码技术提出了新的要求。例如,新型显示技术的发展,如Mini LED和Micro LED,提供了更高的亮度、色域和对比度,同时也要求视频编码技术能够支持这些新的显示特性。

有线电视时代

在有线电视时代,广播电视制式如PAL、NTSC和SECAM被广泛使用,这些制式决定了视频信号的格式和传输方式。例如,NTSC制式是美国国家电视标准委员会制定的彩色电视广播标准,而PAL制式则是逐行倒相制,它们的发展为后来的视频编码技术奠定了基础。

数字电视时代

数字电视时代的到来,VCD/DVD等数字视频格式的出现,推动了MPEG-1、MPEG-2等编码标准的发展。这些标准使得视频内容能够在数字媒体上高效存储和传输。例如,MPEG-2标准被广泛应用于DVD视频的编码,而MPEG-4 AVC(H.264)则因其高效的压缩性能成为最广泛使用的编码标准之一。

互联网流媒体时代

随着互联网技术的发展,流媒体技术成为视频传输的新模式。HTTP、RTMP、RTSP等流式协议的出现,使得视频可以实时传输,提高了用户体验。流媒体技术经常应用在一些现场输出的转播活动,类似体育活动、演唱会和更平常的电视播放及广播节目。这通常称为流媒体,实时流就是将媒体“实时”传输到计算机和设备的过程。流媒体技术的应用将为网络信息交流带来革命性的变化,对人们的工作和生活将产生深远的影响。

流媒体技术的核心功能包括实时传输、自适应比特率流传输等,它不仅改变了人们获取多媒体内容的方式,还促进了新型商业模式的诞生。流媒体技术通过持续的流传输,保证了数据的连续性,用户在播放过程中不会出现卡顿或中断。同时,它采用了高效的压缩算法和传输协议,降低了数据传输的延迟和带宽消耗。

视频编码理论

帧内压缩

帧内压缩(Intraframe compression)是一种压缩技术,它仅利用视频单帧内部的信息进行压缩处理,类似于静态图像的压缩。这种压缩方式通常采用有损压缩算法,通过减少空间上的冗余信息来实现压缩。帧内压缩不考虑视频序列中帧与帧之间的相关性,因此每个帧都被独立处理。帧内压缩的典型应用是关键帧(I帧)的压缩,它为视频序列中其他帧(如P帧和B帧)提供参考。帧内压缩的优点在于压缩质量较高,因为它不受其他帧的影响,但缺点是压缩率相对较低,且数据量较大。

帧间压缩

帧间压缩(Interframe compression)利用视频序列中连续帧之间的相关性来实现压缩,通过比较不同帧之间的数据来减少时间上的冗余信息。帧间压缩通常能够实现更高的压缩比,因为它可以利用帧与帧之间的相似性来减少需要存储和传输的数据量。帧间压缩的典型应用是P帧和B帧的压缩,其中P帧仅参考前一帧,而B帧则参考前一帧和后一帧。帧间压缩的优点是压缩率高,数据量小,利于传输与处理;缺点是在高压缩比和逐渐变化的图像场景下,可能会出现画质损失。

音频压缩

音频压缩技术通过减少音频数据的比特率来减小文件大小,同时尽量保持音质。音频压缩可以是有损的或无损的,但大多数音频压缩格式采用有损压缩以实现更高的压缩比。常见的音频压缩格式包括MP3、AAC等,它们广泛应用于音乐、视频和在线流媒体中。音频压缩算法通常侧重于去除人耳不易察觉的音频成分,以实现在保持可接受音质的同时减小文件大小。

封装

封装格式(也称为容器)是将视频、音频和字幕等多种数据流整合到一个文件中的格式,如MP4、MKV等。封装格式提供了一种将不同类型的媒体数据和元数据打包在一起的方式,以便于存储和传输。封装格式不影响视频内容本身,但影响文件的兼容性和播放性。不同的封装格式可能支持不同的编码格式、元数据类型和文件结构,因此选择合适的封装格式对于确保文件在不同设备和平台上的兼容性至关重要。

帧率/分辨率/场

帧率、分辨率和场是视频质量的关键参数。帧率影响视频的流畅度,高帧率可以使动态场景更加平滑;分辨率决定视频的清晰度,高分辨率提供更多的细节;而场则用于隔行扫描视频,它影响视频的扫描方式和可能的清晰度。这些参数共同决定了视频的质量和所需的存储空间。高帧率和高分辨率的视频通常需要更高的比特率来维持相同的视频质量。

码率/VBR

码率是视频数据传输的速率,通常以比特率(bps)表示。它决定了视频流在单位时间内传输的数据量。可变码率(VBR)是一种编码技术,它根据视频内容的复杂度动态调整码率。在简单场景中,VBR可以降低码率以节省存储空间和带宽;在复杂场景中,VBR可以提高码率以保持视频质量。VBR编码适用于变化较大的视频内容,如动作场景或高细节区域,以平衡视频质量和文件大小。

色域/动态范围

色域和动态范围分别描述了视频能够显示的颜色范围和亮度级别。色域指的是视频可以显示的颜色种类,而动态范围则是指视频可以显示的最亮和最暗之间的差异。现代视频编码标准,如HDR10和Dolby Vision,支持更宽的色域和更高的动态范围,以提供更丰富的视觉体验。这些标准能够捕捉和显示更接近真实世界的色彩和亮度级别,从而提供更加真实和沉浸式的观看体验。

视频编码算法与实现

RGB/YUV/YCbCr

RGB是加色模型,用于显示设备,它通过红、绿、蓝三种颜色的不同强度组合来产生各种颜色。YUV和YCbCr则是减色模型,更适合视频编码。YUV由亮度分量Y和两个色度分量U、V组成,而YCbCr是YUV的缩放版本,广泛应用于视频压缩。YCbCr通过减少色度分量的采样率,从而减少数据量,这是因为人眼对亮度变化比色度变化更敏感 。

H.264/MPEG-4 AVC

H.264,也称为MPEG-4 AVC,是一种广泛使用的视频编码标准。它通过引入新的压缩技术,如多参考帧、多块类型和帧内预测,显著提高了压缩效率。H.264在压缩效率上相较于之前的MPEG-2和MPEG-4 Part 2标准有显著提升,能够在保持视频质量的同时大幅度减少文件大小 。

H.265/HEVC

H.265,也称为HEVC,是H.264的继任者,提供了更高的压缩效率。它支持更高的分辨率,并能节省更多的带宽。HEVC通过改进的编码技术,如更大的块大小、改进的帧内预测和更高效的熵编码,实现了比H.264更好的压缩性能 。

x264/x265

x264和x265分别是H.264和H.265的开源实现。它们提供了高质量的视频编码,并支持多种编码选项。这些工具被广泛用于视频制作和流媒体传输,因为它们能够在保证视频质量的同时,有效控制文件大小。

MPEG-4/MKV

MPEG-4是一系列由国际标准化组织(ISO)和国际电工委员会(IEC)共同开发的多媒体标准,正式名称为ISO/IEC 14496。它不仅包括视频和音频的压缩算法,还涵盖了3D图形和动画的压缩。MPEG-4的核心优势在于其基于对象的编码理念,能够将视频场景分解为多个视频音频对象,分别编码后再混合传输,这为视频编辑和交互提供了极大的灵活性。MKV是Matroska视频格式的文件扩展名,它是一个开放标准的自由容器格式,可以容纳多种不同的编码格式和字幕流。MKV因其高度的灵活性和开放性,成为了流行的视频发布格式之一。

ffmpeg

FFmpeg是一个开源的多媒体框架,它提供了一整套工具来处理视频和音频数据。FFmpeg支持录制、转换以及流化音视频,它能够处理几乎所有的媒体格式,并且提供了丰富的命令行工具,可以用于视频转码、格式转换、视频处理等多种应用场景。FFmpeg的最新版本中增加了对AV1编码的支持,通过librav1e进行加速,同时支持AV1帧合并比特流过滤器和AV1附件B解复用器。

AV1/dav1d

AV1是由开放媒体联盟(AOMedia)开发的新一代免版税视频编码格式,旨在提供比现有编码标准如H.264和VP9更高的压缩效率。Dav1d是AV1视频编码格式的开源解码器,由VideoLAN团队和FFmpeg社区共同开发。Dav1d支持AV1编码的所有特性,包括多种二次采样方法和位深度选项,提供了跨平台的编译与安装便利,采用Meson构建系统简化开发流程。Dav1d解码器以其高性能和完全免费的优势,填补了市场上AV1硬件解码器的空白,为用户提供了一个高效的AV1解码解决方案。

NVENC/QSV

NVENC和QSV是两种硬件加速视频编码技术。NVENC是由NVIDIA提供的,支持在NVIDIA GPU上进行视频编码,而QSV则是由Intel提供的,利用Intel的集成显卡进行视频编码。这些技术通过利用GPU或集成显卡的并行处理能力,显著提高了视频编码的效率,特别适合需要实时处理的高分辨率视频。根据最新的测试结果,Intel的QSV在编码质量上已经超过了NVIDIA的Turing NVENC,尤其在HEVC和AV1编码上表现突出。

小丸工具箱/StaxRip

小丸工具箱是一款拥有图形用户界面的音视频处理软件,它基于x264、ffmpeg等命令行程序,旨在简化视频压制过程。小丸工具箱支持高质量的H264+AAC视频压制,内嵌ASS/SRT字幕到视频中,以及AAC/WAV/FLAC/ALAC音频转换等功能。StaxRip则是一款功能强大的视频编码和转换工具,它提供了用户友好的界面和丰富的编码选项,使得视频编码和处理变得更加容易。

Adobe ME/Voukoder

Adobe Media Encoder(ME)是一款由Adobe公司开发的专业视频编码工具,它支持多种编码格式和封装格式,提供了丰富的编码设置和优化选项。Voukoder是一个开源项目,它为Windows应用程序提供了一个简单的方式来集成FFmpeg编码器,从而简化了视频编码和处理的过程。Voukoder可以与Adobe Premiere、Adobe Media Encoder等应用程序集成,使得用户可以在这些软件中直接使用FFmpeg的编码器进行视频处理。通过Voukoder,用户可以自定义编码参数,比如使用x264编码器时,可以调整CRF值、分辨率等,以达到优化视频质量和文件大小的目的。

扩展内容

流式视频传输

流式视频传输是一种网络传输技术,它允许视频在互联网上实时传输,观众无需下载整个视频文件即可观看。这种技术在直播和在线视频服务中非常流行。流式传输是数据传输方法,通过一次在互联网上传输几秒钟的文件,客户端设备不必在开始播放之前下载整个视频。实时流媒体没有有限的开始和结束时间,它通常是一种自适应的、从服务端向下传输到浏览器端的数据流。通常我们需要不同格式和特定的服务端软件来实现这个。

什么是流式视频传输

流式传输是数据传输方法,通过一次在互联网上传输几秒钟的文件,客户端设备不必在开始播放之前下载整个视频。实时流媒体没有有限的开始和结束时间,它通常是一种自适应的、从服务端向下传输到浏览器端的数据流。流式传输技术广泛应用于在线媒体播放、实时通信等领域,它基于流量控制原理,保障数据传输的流畅性和可靠性。

自适应流

自适应流(Adaptive Streaming)是一种技术,它允许播放器根据用户的网络条件和设备性能动态调整视频的质量。这种方法通过监控数据传输速率,如果速率慢,跟不上,就降低到低带宽(因此质量较低)的数据流。为了拥有这种能力,我们需要使用能实现该功能的数据格式。实时流格式通常是把流分割成许多不同质量和比特率的小片段,以此来实现自适应流的特性。

流式协议

在流式视频传输中,常用的协议包括HTTP、RTMP、RTSP等。HTTP是最常使用的协议,而RTMP(实时消息协议)是由Adobe公司研发的专有协议,支持Adobe Flash插件。RTSP(实时流协议)控制媒体在两端传输的会话,且同时使用实时传输协议(RTP)和实时控制协议(RTCP)来传输媒体流。媒体源扩展(MSE)是一个W3C的工作草案,计划用来扩展HTMLMediaElement使其支持使用JavaScript来生成用于播放的媒体流。

FLV

FLV(Flash Video)是一种流行的流媒体视频格式,被广泛用于在线视频平台。它支持实时传输,使得视频可以在网络上流畅播放。FLV格式是在sorenson公司的压缩算法的基础上开发出来的,不仅可以轻松导入Flash中,速度极快,并且能起到保护版权的作用。FLV文件由文件头(FLV header)和很多tag组成,tag又可以分成三类:audio, video, script,分别代表音频流,视频流,脚本流。

HLS

HLS(HTTP Live Streaming)是由苹果公司开发的一种流媒体网络传输协议。它将视频分割成多个小块,使得播放器可以逐步下载并播放视频,支持自适应比特率流。HLS协议规定视频的封装格式是TS,视频的编码格式为H264,音频编码格式为MP3、AAC或者AC-3。HLS通过一个扩展的M3U (m3u8) playlist文件来控制播放,这个文件包含了视频名字、位置以及切片播放序列的元数据。

WebRTC

WebRTC(Web Real-Time Communications)是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流/音频流或者其他任意数据的传输。WebRTC由几个相互关联的API和协议组成,它们共同工作以实现这一目标。WebRTC允许在浏览器应用程序中构建任意数据、音频或视频(或其中的任意组合)的点对点通信。WebRTC的一系列标准使得在不需要用户安装插件或任何其他第三方软件的情况下,可以实现点对点数据共享和电话会议。

服务端流式技术

为了实时传输音频和视频,需要在服务器上运行特定的流式软件,或者使用第三方服务。常用的流式软件包括GStreamer、SHOUTcast和Icecast。GStreamer是一个开源的跨平台的多媒体框架,支持了一百多种编码。SHOUTcast是针对流式媒体的专有技术,由Nullsoft开发。Icecast服务是一种针对流式媒体的开源技术,由Xiph.org Foundation进行维护。除了这些软件,也可以使用第三方流式服务来帮助完成工作。