7.3.3. 智能编码#

一、简介#

监控画面里,人和车可能只占 20% 的区域;仓库、机房、园区的大部分背景,几十秒甚至几分钟都没有明显变化。但传统编码器并不知道什么是“人”、什么是“车”,更不知道哪些区域值得保留细节——它只看到一整张像素矩阵,然后尽可能平均地分配码率。

结果通常只有两种:

  • 码率给高了:人物很清楚,墙面、地板、货架也一起被高质量编码,存储和带宽成本居高不下;

  • 码率压低了:背景是省下来了,但人脸、车辆和行为细节也跟着变糊,关键画面反而最先丢失。

当然,你可以使用固定 ROI、手动画框或者基于规则的区域编码。但摄像头中的目标会移动、遮挡、进出画面,固定区域很快就会失效。想让编码器持续知道“哪里重要”,就必须让它具备视觉理解能力。

智能编码技术采用差异化编码的方式降低码率,即前景正常编码,对背景进行深度优化,来达到不降低视频中人,车,非机动车等目标质量的情况下降低视频体积。

相比其他硬件方案,爱芯的高性能NPU能满足多路视频下segmentation模型的实时处理,从而实现对目标的像素级分割,相比普通矩形框的范围识别更进一步的节约码率。实测在AX8850N上可以实现20路1080P@30fps的转码能力。

二、工作方式#

1. 数据流图#

智能编码是一套复杂的流程,它把硬件视频编解码、YOLO26-Seg 实例分割、ByteTrack 多目标跟踪和 VENC ABS QPMAP 组合成一条完整链路:

        flowchart LR
    subgraph INPUT[输入与预处理]
        A[视频输入] --> B[硬件 VDEC]
        B --> C[IVPS resize / letterbox]
    end

    subgraph AI[AI 感知与跟踪]
        C --> D[YOLO26-Seg<br/>检测与实例分割]
        D --> E[ByteTrack<br/>目标跟踪]
    end

    subgraph ENCODE[智能编码]
        E --> F[segmentation mask<br/>生成 ABS QPMAP]
        C --> G[硬件 VENC]
        F --> G
    end

    G --> H[低码率视频输出]

    classDef inputNode fill:#eef6ff,stroke:#4a90e2,color:#1f2933;
    classDef aiNode fill:#eefaf1,stroke:#3d9a50,color:#1f2933;
    classDef encodeNode fill:#fff7e8,stroke:#d48806,color:#1f2933;
    classDef outputNode fill:#f3e8ff,stroke:#7b61ff,color:#1f2933;

    class A,B,C inputNode;
    class D,E aiNode;
    class F,G encodeNode;
    class H outputNode;
    

2. 方案核心#

智能编码方案依靠YOLO26-Seg的结果来生成对应的qpmap值,为了保持质量和性能的最优解本方案做了三层处理:

  1. YOLO26-Seg 找到目标:不仅输出 bbox,还输出每个目标的实例分割 mask;

  2. ByteTrack 维持目标身份:即使不是每一帧都运行检测,也能在中间帧保持目标轨迹;

  3. mask 驱动 QPMAP:编码器保护的不是一个粗糙固定矩形,而是随目标移动和形变更新的区域。

本方案保留的目标类别包括:

person
bicycle
car
motorcycle
bus
train
truck

在默认配置中:

I frame QP:        38
P/B frame QP:      40
ROI QP delta:      -4
GOP:               150
YOLO skip:         5

对 P/B 帧来说,背景区域使用 PQP,而 segmentation mask 覆盖区域使用:

ROI QP = clamp(PQP + delta, 0, 51)

默认参数下,相当于:

背景 QP = 40
目标区域 QP = 36

QP 更低,意味着人物和车辆区域可以获得更高的编码质量;背景仍然维持更高压缩率。I 帧则保持整帧 IQP,不叠加 segmentation delta。

这套机制的关键不是“给一个框降低 QP”,而是:

检测、跟踪、mask 传播和编码器 QPMAP 始终处于同一条实时数据流中。

X-smartVenc 支持将 segmentation mask 和 bbox 直接绘制到输出视频:

./smartVenc_CLI \
    -i input.mp4 \
    -o output.mp4 \
    --iqp 38 \
    --pqp 40 \
    --gop 150 \
    --conf 0.25 \
    -x 1

下面这组连续取样画面不是离线脚本后处理,也不是单独的模型可视化,而是从 AX650 使用 -x 1 实际编码输出中直接截取的画面:

AX-smartVenc 每帧检测的 segmentation mask 与 bbox 输出

绿色区域是 YOLO26-Seg 输出并经过跟踪维护的目标 mask,绿色矩形是对应 bbox,在QPMAP中对mask区域的QP值进行调优,保证目标的清晰度。

三、AX8850N 实测:20 路 1080p,626.18 FPS#

智能编码的测试不是单独执行 YOLO,也不是绕过编码器只跑前处理,而是完整执行:

FFmpeg demux
→ Annex-B BSF
→ VDEC Send/GetFrame
→ IVPS
→ YOLO26-Seg
→ ByteTrack
→ QPMAP build
→ VENC SendFrame
→ VENC GetStream
→ 码流统计
→ ReleaseStream

20 路测试使用:

./tools/sh/run_20ch.sh 20 --no-output

--no-output 只是不把码流写成 20 个视频文件,避免 NFS 或磁盘写入干扰纯处理吞吐;VENC GetStream、输出字节统计和 ReleaseStream 仍然完整执行。

1. 实测结果#

平台:                  AX8850N
输入:                  1920×1080 H.265 MP4
并发进程:              20
每路帧数:              1497
总处理帧数:            29940
成功路数:              20 / 20
进程失败:              0
Aggregate FPS:         626.18
平均每路 FPS:          31.31
最低每路 FPS:          30.83
最高每路 FPS:          32.41
帧数一致性:            1497 - 1497
实时状态:              PASS

每路都使用独立的:

VDEC Group ID:   0...19
VENC Channel ID: 0...19
Detector handle
Tracker handle
QPMAP ring
异步 VENC drain

最重要的不是某一路偶尔冲到 32 FPS,而是:

  • 20 路全部完成;

  • 20 路全部处理 1497 帧;

  • 没有进程失败;

  • 最慢一路仍达到 30.83 FPS;

  • 测试结束后没有残留 CLI 进程。

这意味着 智能编码 在 AX8850N 上已经具备面向多路视频分析和智能转码的实际工程基础,而不是只能展示单路效果的算法样例。

2. 转得快还不够:20 路转码结果也要一致#

多路系统只看 FPS 还不够。如果 20 路使用相同输入和参数,却出现明显不同的码率、压缩倍率或画质指标,就意味着多实例之间可能存在状态串扰、资源竞争或编码控制不稳定。

我们对 AX8850N 20 路默认转码结果逐路计算了文件压缩比、平均码率、PSNR 和 SSIM。质量工具按参考与结果实际可对齐的帧序列进行比较,本次每路均统计到 1496 个可比帧

Result file

Compression Ratio

Average Bitrate

Frames

PSNR Avg

PSNR Y

PSNR U

PSNR V

SSIM All

SSIM Y

SSIM U

SSIM V

multich_20_default_v340_20260728_185410/ch01_default.mp4

10.719x

384.219 kbps

1496

33.356703

31.756055

42.430866

43.643170

0.930709

0.906982

0.974192

0.982136

multich_20_default_v340_20260728_185410/ch02_default.mp4

10.728x

383.879 kbps

1496

33.311523

31.710069

42.404988

43.622368

0.930233

0.906304

0.974067

0.982114

multich_20_default_v340_20260728_185410/ch03_default.mp4

10.723x

384.056 kbps

1496

33.303793

31.702052

42.411177

43.614049

0.930124

0.906135

0.974086

0.982115

multich_20_default_v340_20260728_185410/ch04_default.mp4

10.700x

384.883 kbps

1496

33.304784

31.702966

42.412625

43.619291

0.930127

0.906152

0.974062

0.982091

multich_20_default_v340_20260728_185410/ch05_default.mp4

10.734x

383.657 kbps

1496

33.343924

31.743144

42.423349

43.631553

0.930584

0.906809

0.974158

0.982107

multich_20_default_v340_20260728_185410/ch06_default.mp4

10.707x

384.654 kbps

1496

33.361022

31.760594

42.437189

43.631279

0.930784

0.907094

0.974161

0.982167

multich_20_default_v340_20260728_185410/ch07_default.mp4

10.698x

384.965 kbps

1496

33.303578

31.702062

42.402145

43.611510

0.930109

0.906134

0.974024

0.982092

multich_20_default_v340_20260728_185410/ch08_default.mp4

10.706x

384.664 kbps

1496

33.358783

31.758023

42.433503

43.651398

0.930751

0.907038

0.974202

0.982153

multich_20_default_v340_20260728_185410/ch09_default.mp4

10.718x

384.243 kbps

1496

33.350227

31.749543

42.426406

43.636228

0.930642

0.906891

0.974165

0.982128

multich_20_default_v340_20260728_185410/ch10_default.mp4

10.716x

384.318 kbps

1496

33.302939

31.701229

42.408761

43.613341

0.930113

0.906130

0.974072

0.982091

multich_20_default_v340_20260728_185410/ch11_default.mp4

10.707x

384.638 kbps

1496

33.306020

31.704483

42.406977

43.612112

0.930144

0.906179

0.974056

0.982094

multich_20_default_v340_20260728_185410/ch12_default.mp4

10.747x

383.193 kbps

1496

33.351605

31.750815

42.436468

43.632685

0.930626

0.906861

0.974160

0.982153

multich_20_default_v340_20260728_185410/ch13_default.mp4

10.735x

383.625 kbps

1496

33.350882

31.749967

42.441386

43.632268

0.930627

0.906863

0.974162

0.982151

multich_20_default_v340_20260728_185410/ch14_default.mp4

10.706x

384.679 kbps

1496

33.350121

31.749312

42.436810

43.629994

0.930621

0.906858

0.974143

0.982153

multich_20_default_v340_20260728_185410/ch15_default.mp4

10.694x

385.113 kbps

1496

33.350784

31.750040

42.432033

43.633814

0.930621

0.906853

0.974132

0.982181

multich_20_default_v340_20260728_185410/ch16_default.mp4

10.707x

384.654 kbps

1496

33.253626

31.650775

42.384933

43.601572

0.929591

0.905378

0.973937

0.982093

multich_20_default_v340_20260728_185410/ch17_default.mp4

10.698x

384.968 kbps

1496

33.248521

31.645144

42.398138

43.605271

0.929917

0.905838

0.974047

0.982102

multich_20_default_v340_20260728_185410/ch18_default.mp4

10.703x

384.772 kbps

1496

33.357443

31.757029

42.431215

43.629966

0.930732

0.907016

0.974155

0.982174

multich_20_default_v340_20260728_185410/ch19_default.mp4

10.728x

383.872 kbps

1496

33.300017

31.698398

42.403142

43.608348

0.930081

0.906084

0.974045

0.982106

multich_20_default_v340_20260728_185410/ch20_default.mp4

10.737x

383.555 kbps

1496

33.258763

31.655912

42.396719

43.597935

0.929632

0.905435

0.973988

0.982064

把 20 路数据汇总后,一致性更加直观:

指标

20 路平均值

最小值

最大值

最大跨度

Compression Ratio

10.7156x

10.694x

10.747x

0.053x

Average Bitrate

384.330 kbps

383.193 kbps

385.113 kbps

1.920 kbps

PSNR Avg

33.321253 dB

33.248521 dB

33.361022 dB

0.112501 dB

PSNR Y

31.719881 dB

31.645144 dB

31.760594 dB

0.115450 dB

SSIM All

0.930338

0.929591

0.930784

0.001193

SSIM Y

0.906452

0.905378

0.907094

0.001716

几组数字尤其值得注意:

  • 20 路平均码率都稳定在约 384 kbps,最大差值只有 1.92 kbps

  • Compression Ratio 集中在 10.694x~10.747x,最大跨度仅 0.053x

  • PSNR Avg 的 20 路最大跨度只有 0.113 dB

  • SSIM All 的最大跨度只有 0.001193

  • 20 路质量评估的可比帧数全部为 1496,没有某一路提前结束或少算一段。

因此,AX8850N 的 20 路结果不只是“都跑到了 30 FPS”,还表现出高度一致的码率、压缩倍率和全参考画质指标。对于多路录像、NVR 和边缘视频网关,这种跨通道一致性意味着容量规划更可预测,也说明各实例的编码配置、QPMAP 状态和资源上下文没有出现明显串扰。

四、 AXCL支持:Raspberry Pi 5 + 加速卡,10 路 1080p × 25 FPS#

智能编码不只支持 AX8850N SoC 板端运行,还支持 AXCL Host 模式。

在 AXCL 模式下,Host 负责应用和媒体 I/O,视频解码、IVPS、NPU 推理与编码由 AXCL 设备完成。项目同时处理了 AXCL 特有的工程问题:

  • runtime 初始化与 device index 选择;

  • 每个 worker thread 独立绑定 AXCL context;

  • raw NV12 Host staging 与 H2D copy;

  • ENGINE output D2H copy;

  • VENC 码流 D2H copy;

  • Host 地址和 device address 的所有权边界。

我们将 AXCL AArch64 版本部署到了 Raspberry Pi 5:

Host:               Raspberry Pi 5
Host architecture:  aarch64
AXCL device ID:     1
Input:              1920×1080 H.265
YOLO interval:      5

单路结果#

单路 --no-output:   119.61 FPS
单路 MP4 输出:      127.80 FPS
输出帧数:           1497
MP4 完整解码:       PASS

10 路结果#

成功路数:           10 / 10
进程失败:           0
每路帧数:           1497
总处理帧数:         14970
Aggregate FPS:      263.69
平均每路 FPS:       26.37
最低每路 FPS:       26.04
最高每路 FPS:       27.14
帧数一致性:         PASS

按照视频监控中常见的 25 FPS 口径,这套组合可以稳定支撑:

10 路 1080p × 25 FPS 智能编码。

10 路 profiling 显示,主要压力来自:

阶段

单路

10 路代表值

ENGINE Output D2H copy

18.81 ms/inference

70~75 ms/inference

QPMAP build

0.40 ms/frame

5.2~5.8 ms/frame

VENC SendFrame wait

0.22 ms/frame

11.7~12.3 ms/frame

VENC GetStream wait

7.35 ms/frame

33~34 ms/frame

这说明瓶颈不在文件读取,而在多路共享时的 AXCL 数据传输和设备编解码队列。树莓派上PCIE2.0X1的速率导致数据搬运时间增大。

五、它适合哪些场景?#

安防监控和园区视频#

人、车等关键目标区域保留更多细节,大面积静态背景使用更高压缩率。适合 NVR、边缘服务器和智能摄像机前端。

工厂、仓库和机房#

生产区域通常背景固定,真正重要的是人员、车辆和运动目标。智能 QPMAP 可以减少无效背景码率,把存储预算用在可追溯的关键区域。

六、最后:视频编码不应该只看像素,还应该看内容#

过去的视频编码器解决的是一个纯信号问题:如何用更少的字节表达一串图像。

但在今天的安防、工业和边缘 AI 场景里,我们真正关心的从来不是“每个像素都一样清楚”,而是:

  • 人有没有看清;

  • 车有没有保住细节;

  • 关键目标是否可以回溯;

  • 在固定带宽和存储预算下,能不能把资源优先留给真正重要的内容。

智能编码给出的答案,是把 AI 和编码器放进同一条实时链路:

看见目标
→ 跟住目标
→ 生成 mask
→ 更新 QPMAP
→ 编码关键区域

真实测试数据也给出了清晰的落地边界:

AX650:
20 路 1080p
626.18 aggregate FPS
20/20 成功

Raspberry Pi 5 + AXCL:
10 路 1080p × 25 FPS
263.69 aggregate FPS
10/10 成功

这不是一个只会跑模型的样例,也不是一个只会压视频的编码器。

它是一套让视频编码真正“理解画面”的边缘智能视频流水线。

如果你的项目正在面对多路视频、长期存储、关键目标画质、边缘侧部署或 AX8850N/AXCL 跨平台开发,智能编码值得成为下一版视频系统的起点。

七、相关链接指引#

智能编码 AX-SmartVenc

AX-SmartVenc 让视频编码真正看懂画面,AX8850N 实测 20 路实时