本文基于CANN开源社区的atvc仓库进行技术解读

  • CANN组织链接:https://atomgit.com/cann
  • 仓库链接:https://atomgit.com/cann/atvc

前言

视频处理是AI的一个重要应用场景。从视频分析、智能监控到视频生成,都离不开视频的编解码。

传统的视频编解码通常由CPU或专用硬件(如GPU的NVENC)来做。atvc则是CANN提供的NPU视频编解码库。

atvc是什么

atvc的全称应该是Ascend Transcoding/Video Codec。从项目描述来看,它提供了视频编解码的NPU加速能力。

核心功能:

  • 视频解码:把压缩的视频变成原始帧
  • 视频编码:把原始帧压缩成视频
  • 格式转换:不同格式之间转换

压缩视频\nH.264/H.265等

atvc解码

原始帧\nYUV/RGB

AI处理\n检测/识别等

处理后的帧

atvc编码

输出视频

支持的格式

视频编解码涉及很多格式:

编码格式

  • H.264 (AVC)
  • H.265 (HEVC)
  • 可能还有其他

像素格式

  • YUV420
  • NV12
  • RGB

具体支持情况以官方文档为准。

为什么在NPU上做

传统方案:

视频 → CPU/GPU解码 → 传输到NPU → AI处理 → 传输回来 → CPU/GPU编码

问题是数据要来回搬运。

atvc方案:

视频 → NPU解码 → NPU上AI处理 → NPU编码 → 视频

数据始终在NPU上,减少了传输开销。

使用场景

场景一:视频分析

监控视频的智能分析:

监控视频流

NPU解码

目标检测

行为识别

异常告警

场景二:视频转码

把一种格式转成另一种:

H.264视频

解码

可选处理\n缩放/滤镜

编码

H.265视频

场景三:视频增强

AI增强视频质量:

低分辨率视频

解码

超分辨率AI

编码

高分辨率视频

基本使用流程

大致的使用步骤:

# 伪代码
import atvc

# 1. 创建解码器
decoder = atvc.Decoder(codec="h264")

# 2. 解码帧
for packet in video_stream:
    frame = decoder.decode(packet)
    
    # 3. 处理帧
    result = ai_model(frame)
    
    # 4. 编码输出(如果需要)
    encoder.encode(result)

# 5. 释放资源
decoder.release()

具体API以官方文档为准。

注意事项

1. 格式兼容性

不是所有格式都支持,使用前确认。

2. 视频参数

分辨率、帧率、码率等参数要配置正确。

3. 同步问题

视频有时间戳,处理时要注意同步。

和其他方案的比较

方案 硬件 特点
FFmpeg CPU 通用,格式全
NVENC/NVDEC NVIDIA GPU 成熟,普及
atvc 华为NPU 和AI处理无缝衔接

atvc的优势在于和CANN生态的深度集成。

总结

atvc是CANN的视频编解码库,主要功能:

  • 视频解码(H.264/H.265等)
  • 视频编码
  • 格式转换

对于需要在NPU上做视频处理的场景,atvc是个好选择。

相关链接

  • atvc仓库:https://atomgit.com/cann/atvc
  • ops-cv仓库:https://atomgit.com/cann/ops-cv
  • FFmpeg官网:https://ffmpeg.org

这篇是我了解NPU视频处理时的笔记,如有不准确欢迎指正。

Logo

昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链

更多推荐