04 图像编码
图像编码就是把原始图像数据压缩成更小的、便于存储或传输的格式
说明
本文档仅对 sample_venc 的使用进行介绍,代码具体实现请参考<SDK_DIR>/sample/venc/sample_venc.c及其相关文件
1 sample_venc的作用和意义
sample_venc是SDK中用于演示视频编码能力的示例程序,主要用于展示VENC模块的典型使用方式。该示例既可以接入摄像头图像链路,实现VI -> ISP -> VPSS -> VENC 的实时采集编码,也可以直接输入YUV原始图像文件进行编码测试,实现“文件输入 -> 编码输出”的独立验证流程。通过该示例,用户可以快速验证编码器是否正常工作、码率控制是否生效、不同编码格式是否可用,以及ROI、QPMap、JPEG抓拍、JPEG拼接等高级编码能力是否正常,从而为后续视频存储、网络推流和图像抓拍业务开发提供参考。
2 sample_venc的工作流程
sample_venc 主要包含两类工作流程。
- 摄像头实时编码流程
程序首先初始化系统资源,然后通过 VI 模块采集 sensor 图像,经 ISP 做图像处理,再送入 VPSS 做缩放或分发,最后交给 VENC 进行编码输出。 在这种模式下,sample_venc 可以同时输出主码流和子码流,例如 H.265 + H.264,也可以扩展到 JPEG/MJPEG 抓拍、QPMap、ROI 等功能。
- 本地YUV文件编码流程
程序直接读取一个 NV21 格式的原始 YUV 文件,将其作为输入帧送入 VENC 模块编码,最终输出 H.264 / H.265 / JPEG / MJPEG 等码流文件。 这种方式不依赖 sensor 和 ISP,适合用于单独验证编码器能力、输入格式匹配情况以及码率控制参数是否正常。
3 sample_venc的使用示例
编译和拷贝步骤同sample_vio
3.1 参数选择:
sample_venc:
功能描述:采集编码用例
命令格式:1)./sample_venc [index]
0 卷绕/低延时 h265+h264编码 主码流+子码流+jpeg
1 h265+h264编码 主码流+子码流
2 h265+h264编码 qpmap
3 h265+h264编码 roi
4 jpeg/mjpeg编码
2)./sample_venc [nv21 yuv file] + [width] + [height] + [target format]
nv21 yuv file: 输入yuv文件
width: 输出分辨率宽
height: 输出分辨率高
target format: 输出编码类型h265, h264, jpeg, mjpeg3.2 直接输入YUV原始图像文件进行编码测试
步骤1:获取丽娜图获取链接
提示
更推荐用户自行准备高清图片,在编码后能够看到和原图明显的区别,但需注意输入图像的宽度和高度请勿输错,否则编码出的图像将会乱码 高度和宽度可在PC端选中图片查看,如下:

步骤2:png格式转yuv格式
将lena.png拷贝到编译服务器执行以下指令,将png格式文件转成yuv格式文件
ffmpeg -i lina.png -pix_fmt nv21 lina.yuv转换完成后将lina.yuv文件拷贝到板端
步骤3:对yuv文件进行编码处理
./sample_venc ./lena.yuv 512 512 jpeg执行完毕后能够看到当前目录下生成snap0_0.jpg~snap0_29.jpg,将这些jpeg文件拷贝到PC端即可查看。
步骤4:对比编码前后区别


