verify-video-reference-on-gpu.md
2.72 KB
验证:参考视频(Ref2VA video reference)端到端跑通
状态:代码已写完(2026-08-20 夜),完全没有在真实 GPU 上跑过。本地 Mac 开发机没有卡,
也没装 DiffSynth-Studio,_references() 里视频这段是纯读 pipeline 源码写的,语法和上传校验
本地测过,生成效果没测过。
改了什么
minimax-h3/api.py:GenReq加reference_video_urls(最多 3 段)。_references()把参考 视频下载到临时文件,调diffsynth.utils.data.audio_video.read_video_audio()解码+对齐音轨, 读不到音轨就用"video"(静音)类型,读到了用"video_audio"类型。h3-console/server.py:/v1/assets加 mp4/mov/webm 支持,200MB 上限,轻量魔数校验。h3-console/static/index.html:参考图 tab 加视频多选上传 + URL 直填两条路径。
⚠️ 最大的不确定性:视频解码分辨率的选择
read_video_audio(path, height, width, num_frames, fps=24) 的 height/width/num_frames
现在传的是输出视频自己的分辨率和帧数(跟 _keyframes() 处理首末帧图片的方式一致)。这是
没验证过的简单假设——pipeline 其实另外暴露了 ref_video_short_edge/ref_video_max_pixels
两个参数,专门用来做参考视频自己的归一化(worker() 里已经按默认值传给 pipe() 了,只是从
没真正生效过,因为这条链路从没跑过)。
验证步骤
- 部署到服务器(
server.py/api.py都要重启,跟着 README 的安全重启法:ss按端口找 PID kill,不要pkill -f;重启前确认/v1/backends四张卡都空闲)。 - 找一段几秒钟的短视频(比如已有的某条历史生成产物),通过 h3-console 的参考图 tab 上传, 提交一个 R2V 任务。
- 确认任务能跑完(不是在
_references()这步就报错——先验证代码本身没有语法/接口层面的 bug,这一步失败大概率是read_video_audio/pipeline 调用姿势不对)。 - 跑完了看输出:参考视频里的角色/风格/运镜是不是真的被锁住了。如果锁不住(生成结果跟没给
参考视频差不多),先怀疑上面那条"解码分辨率假设",试试把
read_video_audio的height/width换成按ref_video_short_edge算出来的值,而不是输出分辨率。 - 如果视频带音轨,确认走的是
"video_audio"分支,产出的音频里能听出参考视频的声音特征 (不是纯粹被输出侧的文本/音频生成盖过去)。
参考
代码和排查思路的完整记录见顶层 CHANGELOG.md「2026-08-20(夜,又续七)— Ref2VA 加参考视频/
URL 直填,本地开发,⚠️ 没有 GPU 没测过」。