单文件、中文交互的批量视频压缩工具。以 ffmpeg 为执行层,封装 Intel QSV 与 NVIDIA NVENC 两条硬件编码路径, 覆盖参数选择、批量并发、进度显示、编码后自检与失败重试。默认参数并非推荐值照搬, 而是本文档记录的全部对照实验所得(结果见结论)。
GitHub · UniversalEncoder GitHub · DanmakuRepo 全部实测数据 →
UniversalEncoder.py,按菜单确认参数_encode_run.log,每行含体积变化、视频码率、质量值、耗时
失败会记录原因,单文件最多重试 3 次。安全模式默认开启:原文件保留,
产物写入 output/,确认无误后再考虑替换。
菜单【9】的「现场实测」分支在简单素材上会选中 veryslow 档,实测曾产出 VMAF 19.88 的异常结果。 该分支未验证,不建议使用。
| 菜单项 | 可选值 |
|---|---|
| 6. 质量 | Q24/26/28/30(默认)/32/34/36/38 + 自定义 Q |
| 7. 上限 | 不限制 / 1.0 / 1.5 / 2.0 / 2.5(默认) / 3.0 … 6.0 / 自定义 Mbps |
| 8. 音频 | 128k / 96k(默认) / 64k / 48k / 直通 copy |
| 9. 编码档位 | 默认(medium / p5)/ 现场实测 / 手动选择 |
| 10. 并发 | 2 路(默认) / 现场实测 / 手动 1~8 |
| 11. GOP | 自适应(默认):相机 / 10bit / 4K → 1 秒,其余 2 秒;或 1/2/4 秒、自定义 |
| 12. 质量地板 | 关(默认) / Q34 / Q36 / Q38(压缩 4K 建议 Q36) |
| 13. 杜比视界 | 关(默认,输出 HLG):亮度忠实、体积最优;保留 DV 为实验性功能(亮度偏亮、体积 +40%) |
| 输出容器 | MP4(默认) / MKV / MOV / 跟随源;MOV 强制 AAC |
三个平台的"质量数字"不是同一把尺子,脚本按编码器分别给默认值,手工改参数时须注意:
| 平台 / 编码器 | 取值范围 | 默认值 | 说明 |
|---|---|---|---|
| Intel QSV | QP 1~51 | 30 | ICQ 恒定质量,数字越大体积越小 |
| NVIDIA HEVC | CQ 0~51 | 36 | 实拍类约等于 QSV 值 +6 |
| NVIDIA AV1 | CQ 0~255 | 40 | 标尺与 HEVC 完全不同,不可混用 |
| 版本 | 主要变更 |
|---|---|
| v1.0 | 首个可用版本:双平台自动检测、菜单式参数、批量编码 |
| v3 | NVENC 侧调优:preset p7→p5、并发 3→1、空间 AQ 关闭 |
| v5 | QSV 自动标定:preset 实际只有 TU 7/4/1 三档,选定 TU4 |
| v7 | 新增 --concurrency-test;按实测把 Intel 并发定为 2 路 |
| v15 | 每文件独立日志、失败重试、失败清单 |
| v16 | 上限模式改为 ICQ 反解质量值,修正 AV1 用 -q:v 导致体积膨胀数倍的问题 |
| v23 | 默认 preset 改为 medium(QSV)/p5(NVENC),默认 2 路并发 |
| v31 | 默认上限 2.5 Mbps;修正与反解冲突的 VBR 兜底 |
| v37 | 关闭 Q 缓存;Q32 + 2.5 Mbps 作为当时的定稿基线 |
| v39~v46 | 质量档 24~38、上限 1.0~6.0 Mbps、音频 32k~128k、GOP 菜单、质量地板、启动优化 |
| v47~v49 | 杜比视界 RPU 注入与配置盒移植(后改为默认关闭) |
| v57~v63 | GOP 改为自适应并实测各源;默认质量调为 Q30;元数据与竖屏旋转修正 |
| v66~v69 | 音频默认 96k;GOP 菜单;修复不设 -g 导致的全局卡顿 |
| v70~v76 | 像素率兜底;高级设置折叠;按平台取编码器 |
| v79~v84 | faststart 根治(两处重封装曾把 moov 移回尾部);上限失效根治;.MOV + Opus 失败修复;B 帧五档定论 |
| v85 | 新增输出容器菜单;目标已存在则跳过;编码后五项「承诺-行为」自检 |
| v86 | 自检基准改为跟随用户设置,修复手选 GOP/音频后必然误报的问题 |
| v87 | 当前版本:纯清理,删除 169 行死代码,与 v86 生成的 ffmpeg 命令逐字节一致;40 项单测 + 5 组端到端测试通过 |
UniversalEncoder_v87.py · 255 KB · Python 3.9~3.13
依赖:ffmpeg 需支持 ICQ(9.0 分支或发布版)。脚本启动时会探测构建能力,不支持则提示切换。
仓库含完整提交历史与各版本对照: github.com/SylvanLee205/UniversalEncoder
-b:v + -maxrate / -bufsize,一遍完成),
但本机无 NVIDIA 显卡,未做端到端验证。待确认:① 是否稳定贴合目标码率;② 与 -cq 同用时画质是否下降。-rc-lookahead / -lookahead_level,本机无卡未加入默认参数。