
Scanner视频压缩指南如何控制编码质量并无损导出MP4视频【免费下载链接】scannerEfficient video analysis at scale项目地址: https://gitcode.com/gh_mirrors/sca/scannerScanner是一款支持大规模视频分析Efficient video analysis at scale的开源框架。它的内置视频压缩能力可以让你在处理帧序列时灵活控制编码质量H.264 CRF 质量参数、码率、关键帧间隔或以无损方式存储帧并一键将结果导出为 MP4 视频。本指南带你用几行代码完成这些操作。一、先搞懂Scanner 默认如何压缩视频Scanner 对视频做了原生支持当某个算子Op输出的帧是3 通道 uint8格式时框架会自动使用 H.264 视频编码将其压缩落盘无需任何配置。其他帧类型则默认不做压缩。 这意味着你读表时Scanner 会自动解码压缩数据算子 DAG 看到的始终是原始帧压缩对业务逻辑完全透明。下面是 Scanner 处理视频帧的典型流水线采样 → 缩放 → 灰度转换 → 输出压缩视频流压缩参数在 C 层由 video_encoder.h 中的EncodeOptions结构统一描述包含三个核心字段参数含义默认值quality编码质量软编码器下映射为 H.264 的 CRF 值见 software_video_encoder.cpp-1不指定bitrate目标码率-1不指定keyframe_distance关键帧间隔-1不指定二、控制编码质量compress_video 的三个参数想要自定义编码质量只需在产生帧的算子输出上调用compress_video定义见 op.py# 低质量输出quality 数值越大压缩率越高、画质越低 low_quality_frame blurred_frame.compress_video(quality35)quality类似 CRF 的质量因子适合“按画质取舍文件大小”的场景bitrate固定码率适合“按带宽/存储预算编码”的场景keyframe_distance控制关键帧密度影响随机访问定位速度。此外还有更通用的compress(codec...)入口支持videoH.264、default默认策略和raw即无损三种编码方式。完整可运行的演示在官方教程 06_compression.py 中涵盖默认压缩、低质量压缩与无损存储三种模式。三、无损导出lossless() 一步关闭压缩 当你需要逐比特精确还原帧数据如中间结果归档、后续精细再处理时用lossless()将列标记为无损# 指定输出使用 raw 无损编码不经过任何有损压缩 lossless_frame blurred_frame.lossless() output sc.io.Output(lossless_frame, [lossless_stream]) sc.run(output, sp.PerfParams.estimate())对应地compress(raw)与lossless()等价。无损存储的代价是更大的磁盘占用建议只对关键中间列使用。四、一键导出 MP4save_mp4 快速上手任何保存为压缩NamedVideoStream的帧序列都可以直接导出为.mp4文件接口定义见 storage.py# 在当前目录生成 low_quality_video.mp4 low_quality_stream.save_mp4(low_quality_video)save_mp4还支持两个可选参数fps导出视频的帧率scale导出时的缩放比例。除了存储流算子输出列column.py同样支持save_mp4可以把中间处理结果直接落成可分享的 MP4。在性能分析时你还能通过 Scanner 的 trace 可视化查看EncodeVideo流水线阶段的耗时分布五、最佳实践速查 ✅默认场景3 通道 uint8 帧自动 H.264 压缩零配置即可享受低存储成本节省存储/带宽用compress_video(quality...)降低质量或用bitrate精确控制码率需要精确还原调用lossless()走 raw 无损编码交付成果stream.save_mp4(name, fps..., scale...)一键导出 MP4。更多用法可参考官方文档指南 stored-streams.rst 与 walkthrough.rst以及视频编解码核心实现目录 scanner/video/。【免费下载链接】scannerEfficient video analysis at scale项目地址: https://gitcode.com/gh_mirrors/sca/scanner创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考