> For the complete documentation index, see [llms.txt](https://wangwei1237.gitbook.io/digital_video_concepts/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wangwei1237.gitbook.io/digital_video_concepts/shu-zi-shi-pin-jian-jie/1_2_videocompressionconsiderations.md).

# 视频压缩

数字视频在处理、存储和传输方面的主要缺点是表示视频信号所需的大量数据。对相机电压变化的简单扫描和二进制编码将产生每秒数十亿比特的数据量。如果不对数据进行压缩，将导致昂贵的存储、传输成本。

典型的高清视频（每个图像三个颜色平面，每个平面为1920×1080像素的分辨率，每像素8比特，每秒30帧图像）需要大约每秒15亿比特的数据速率。如果在5Mbps带宽的传输信道上传输，则需要300:1的数据压缩比。显然，有损技术可以满足这种压缩比，但是所带来的影响就是后续的视频重建会在视觉质量上有所损失。

但是，视频压缩技术旨在以指定的数据速率下提供最佳的视觉质量。需要根据视频应用的具体要求、可用的信道带宽、存储容量以及视频特性等因素使用不同的数据速率。旧式公共交换电话网络可以使用33.6Kbps的数据速率，典型的高清电视转播系统（*HDTV*）则需要月20Mbps的数据速率。

## 广泛应用

很多视频应用以在线方式捕获、处理、传输、显示视频信号。对于这些应用而言，视频信号的实时处理和通信是必须的条件。这些应用程序使用端到端的实时工作流程，例如视频聊天，视频会议，流媒体，直播，远程无线显示，远程医疗诊断和外科手术等。

另外一种应用则以离线方式记录视频。在这些中，视频信号被记录到存储设备，以进行存档、分析或进一步处理。录制视频的主存储介质从模拟录像带转移到数字DV，Betacam磁带，光盘，硬盘或闪存。除存档外，存储的视频还用于电视、电影制作，监视、监控以及安全和调查领域的离线处理和分析。

这些用途将从尽可能快地视频信号处理中收益，因此，需要提高视频压缩和解压缩的处理速度。

## 需求冲突

视频压缩在现代移动平台上的需求冲突对人们提出了挑战，人群涵盖了从系统架构师到视频应用的终端用户。 压缩数据易于处理，但通常在压缩时会导致视觉质量损失。好的视频编码解决方案必须在保证质量损失很小的条件下制作视频。

另外，某些视频应用受益于高速视频编码。这通常意味着更高的计算要求，进而会导致更高功耗。 但是，移动设备通常受资源限制，并且电池寿命通常是其最大问题。某些视频应用可能需要牺牲视觉质量以节约能源。

因此，必须平衡这些相互冲突的需求和目的。正如我们将在后面的章节中看到的那样，可以通过调整、平衡视频编码参数以获得期望的结果。

## 硬件vs软件

视频压缩系统可以使用专用的专用集成电路（*ASIC*），现场可编程门阵列（*FPGA*），基于GPU的硬件加速以及纯粹的基于CPU的软件来实现。

ASIC是为特定用途定制的，通常经过专门的优化以执行特定任务，它们不能用于执行规定任务以外的其它任务。虽然ASIC速度快、对错误具有鲁棒性、提供稳定的性能，但它们不灵活、实现单一算法、不可编程、不能易于修改，因此ASIC面临着很快就会过时的问题。现代ASIC通常包含整个32-bit处理器，类似ROM、RAM、EEPROM、Flash的存储单元和其它模块。类似的ASIC常被称为SoC(片上系统)。

FPGA由可编程逻辑模块和可编程互连组成。它们比ASIC灵活得多，相同的FPGA可用于许多不同的应用。典型用途包括从标准零件构建原型。对于较小的设计或较低的产量，FPGA可能比ASIC设计更具成本效益。但是，FPGA通常不会针对性能进行优化，并且性能问题通常不会随着问题规模的扩大而扩展。

基于GPU的硬件加速通常提供中间立场。在这些解决方案中，有一组可编程执行单元，一些性能和功耗优化的固定功能硬件单元。复杂的算法可以利用可编程执行单元的并行处理优势，同时固定功能单元提供快速处理能力。还可以基于某些反馈信息更新参数，从而使固定功能单元具备重复应用的能力。因此，这些解决方案具有灵活性和可扩展性，同时还针对性能和功耗进行了优化。可用参数的调整可确保在给定比特率下的高视觉质量。

因为运行在通用处理器上，基于CPU的软件实现最灵活。因此，相同的方案通常可移植到各种平台。虽然基于软件的实现存在很多性能增强方法，但它们通常无法达到所需的性能水平，并且手动调整各种参数和低级别代码的维护变成了令人生畏的任务。但是，在软件实现中很容易调整各种编码参数。因此，通过调整各种参数，软件实现可以在给定的压缩下提供最佳的视觉质量。
