ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Hy-Nomas 相机控制完全指南:生成 npz 轨迹文件,精准驾驭视频镜头运动

Hy-Nomas 相机控制完全指南:生成 npz 轨迹文件,精准驾驭视频镜头运动
  • 人工智能
  • 媒体生成
  • 视频
  • 多模态
  • 计算机视觉
  • 深度学习
  • 模型量化
  • LoRA

【免费下载链接】Hy-Nomas

项目地址:https://ai.gitcode.com/tencent_hunyuan/Hy-Nomas
点击查看免费下载

想给 Hy-Nomas 视频生成模型加上"运镜"吗?Hy-Nomas 的相机控制功能允许你通过一个npz 轨迹文件,逐帧定义虚拟相机的位置与朝向,从而精准控制生成视频中的镜头运动——推镜头、横移、环绕都可以做到分帧级别的把控。这篇完整指南将带你用几步简单操作,搞定 npz 轨迹文件的制作、参数调优与常见问题排查。

💡 先了解 Hy-Nomas:腾讯混元开源的自由交互视频世界生成模型,支持多轮文本指令 + 相机控制逐段生成连续视频,蒸馏推理每片段仅 8 步去噪,默认输出720 × 1280、24 FPS。

Hy-Nomas 相机控制:把虚拟相机交给你的"运镜脚本"

Hy-Nomas 的生成条件一共有三路信号:

条件作用你提供的形式
📝 文本描述世界里"有什么、发生什么"结构化 JSON 提示词
🎥相机轨迹规定镜头"怎么动"npz 轨迹文件(本文主角)
🧠 KV cache记住已生成的历史片段,让世界保持连贯模型自动维护

可以这样理解:npz 文件就是一段"给虚拟摄影师的运镜脚本",逐帧告诉模型——这一帧相机站在哪、朝哪个方向看、用什么焦距。模型内部把每 4 个视频帧的归一化相机外参矩阵展平为 64 维向量,通过交叉注意力注入视频生成过程,实现镜头运动与画面内容的同步控制。

🎬 不传轨迹文件也完全可以:镜头会按模型默认行为自然运动。想要"精确到每一帧"的电影感运镜,才需要 npz 轨迹。

npz 轨迹文件要求:帧数、形状与两个必备字段

Hy-Nomas 官方推理代码支持npz(NumPy 压缩归档)格式的轨迹文件,由代码仓库内置的相机轨迹工具(hymm/models/camera/geometry/generate_npz_trajectories.py)生成或按相同格式自制。文件里只需要两个数组:

字段形状含义关键点
c2ws[N, 4, 4]每帧的camera-to-world(相机到世界)矩阵:左上 3×3 是朝向,最后一列是相机在世界中的位置方向别写反,必须是相机→世界
intrinsics[N, 3, 3]每帧的相机内参:焦距(像素)与主点N 帧每帧一份,内参相同就复制

其中N 必须与视频总帧数严格相等:

🔢N = 视频时长(秒)× 帧率。默认 24 FPS 下,10 秒视频就是240 帧;若改帧率,N 同步修改。

内参矩阵是标准的 3×3 形式(单位:像素):

intrinsics = [[fx, 0, cx], [ 0, fy, cy], [ 0, 0, 1]]

fx/fy是焦距,cx/cy是画面中心点。对默认的 720 × 1280 输出,可直接参考下面示例中intrinsics()的取值,按实际输出分辨率等比换算。

三步生成镜头轨迹:推镜头、横移与环绕示例

下面给出一个零依赖的纯 numpy 脚本,一次生成三种经典运镜。保存为make_camera_npz.py后执行python make_camera_npz.py即可:

import numpy as np def intrinsics(N, width=1280, height=720): """每帧一份相机内参 [N, 3, 3],单位:像素""" fx = fy = width * 0.6 # 焦距 ≈ 画面宽度 × 0.6 K = np.array([[fx, 0, width / 2], [0, fy, height / 2], [0, 0, 1.0]]) return np.repeat(K[None], N, axis=0) def make_npz(N, path, positions, rotations): """把逐帧位置/朝向组装成 camera-to-world 矩阵并保存""" c2ws = np.zeros((N, 4, 4)) c2ws[:, :3, :3] = rotations c2ws[:, :3, 3] = positions c2ws[:, 3, 3] = 1.0 np.savez(path, c2ws=c2ws, intrinsics=intrinsics(N)) N = 240 # 10 秒 × 24 FPS;改帧率或时长时同步调整 # ① 推镜头:沿 z 轴匀速前推(z 轴为镜头朝向) t = np.linspace(0, 1, N) make_npz(N, "push_in.npz", np.stack([np.zeros(N), np.zeros(N), 6.0 - 3.0 * t], axis=-1), np.broadcast_to(np.eye(3), (N, 3, 3)).copy()) # ② 横移镜头:沿 x 轴横向平移 make_npz(N, "truck_right.npz", np.stack([-4.0 + 8.0 * t, np.zeros(N), 4.0], axis=-1), np.broadcast_to(np.eye(3), (N, 3, 3)).copy()) # ③ 环绕镜头:绕场景中心画圆弧,相机始终面向中心 ang = np.linspace(0, np.pi / 2, N) R = np.stack([np.stack( [[np.cos(a), 0, -np.sin(a)], [0, 1, 0], [np.sin(a), 0, np.cos(a)]] for a in ang), axis=0) make_npz(N, "orbit.npz", np.stack([6.0 * np.sin(ang), np.zeros(N), 6.0 * np.cos(ang)], axis=-1), R)

三点使用说明:

  • 方向约定:脚本采用常见的"镜头朝前"坐标系——x 向右、y 向下、z 为镜头朝向。所以推镜头沿 +z 前进,横移沿 x 滑动。
  • 数值是"世界单位",没有严格物理意义,你只需保证相机不穿入场景中心、运动平滑即可。
  • 脚本产物只是起步模板:方向、速度曲线(把线性t换成缓动函数更自然)、环绕角度都可以按你的故事板自由改。

⚠️ 多片段视频注意:示例提示词中每个segment约 5 秒(120 帧 @ 24 FPS)。轨迹要覆盖哪段视频,N 就取哪段的帧数。

在推理命令中挂载 npz 轨迹并生成视频

在标准推理命令的末尾追加一个参数即可启用相机控制:

inference.camera_trajectory=/path/to/camera.npz

完整示例(代码仓库根目录执行,模型权重路径由HY_NOMAS_MODEL_DIR指定):

bash scripts/inference/inference_from_config.sh configs/experiment/inference.yaml \ dit_weight="$HY_NOMAS_MODEL_DIR/DiT/distilled/diffusion_pytorch_model_ema_0_995.safetensors" \ model.vae.checkpoint="$HY_NOMAS_MODEL_DIR/VAE/PixelUMM_FT/diffusion_pytorch_model.safetensors" \ inference.prompt="$HY_NOMAS_MODEL_DIR/examples/prompts.json" \ inference.save_path=./outputs/distill \ inference.camera_trajectory=/path/to/camera.npz

📍 提示:权重文件按仓库目录结构存放——蒸馏 DiT 在DiT/distilled/,解码器在VAE/PixelUMM_FT/,提示词模板在 examples/prompts.json。

🔧 硬件要求:标准配置默认 8 路序列并行,需要 8 张 GPU;显存紧张时可改用单卡低显存配置(RTX 4090 + INT8 DiT + FP8 解码器),相机控制的用法完全一致。

微调镜头运动强度:3 个关键参数

轨迹文件定义了"运动形状",参数决定"运动幅度与跟随力度"。官方推理预设(configs/experiment/inference.yaml)中与相机相关的关键项:

参数默认值作用调参直觉
inference.trajectory_translation_scale1.0相机平移强度的缩放系数镜头走得"太慢/太慢不动"→ 调大
inference.trajectory_rotation_scale2.5相机旋转强度的缩放系数转向不明显 → 调大
inference.camera_cfg_scale1.0相机条件的引导强度(guidance)生成结果"不跟轨迹走"→ 适当调大
inference.video_fps24输出帧率改动后 npz 帧数 N 必须同步

三条实用建议:

  1. 先跑默认值,拿到基线视频后再动参数;
  2. 每次只改一个参数、每次只微调 20%~50%,避免一次调飞;
  3. 轨迹幅度与两个 scale 是相乘关系——轨迹本身写得大,scale 再大容易过冲,二选一放大即可。

常见问题排查:镜头不动、抖动、错位怎么办

症状可能原因解决办法
镜头几乎不动轨迹幅度太小,或camera_cfg_scale不足调大轨迹坐标范围,或把camera_cfg_scale提到 1.2~2.0
镜头乱晃、画面抖动逐帧矩阵不平滑(角度跳变)轨迹用平滑曲线生成;检查是否误用了 world-to-camera 矩阵
运动方向反了c2ws写成了 w2c确认是camera-to-world;w2c 记得求逆再传入
轨迹不生效N 帧数与视频帧数不一致核对 N = 时长 ×video_fps,改帧率同步改 N
画面畸变奇怪内参单位/主点与分辨率不匹配按实际输出分辨率重算fx, fy, cx, cy

生成前最后检查清单✅

  • N 与"目标时长 × 帧率"严格相等
  • c2ws形状[N,4,4]、intrinsics形状[N,3,3],且为相机→世界方向
  • 轨迹曲线平滑、相机不穿入主体
  • 内参与实际输出分辨率一致
  • 强度参数从默认值起步微调

快速参考:一张表记住 Hy-Nomas 相机控制

项目结论
轨迹格式npz 文件,含c2ws [N,4,4]+intrinsics [N,3,3]
帧数对齐N = 时长(秒)× 帧率(默认 24 FPS)
启用方式推理命令追加inference.camera_trajectory=xxx.npz
强度三参数平移1.0/ 旋转2.5/ 相机引导1.0
参考实现代码仓库hymm/models/camera/geometry/generate_npz_trajectories.py

一句话总结:把轨迹按"帧数对齐、格式正确、曲线平滑"三条做对,再用三个 scale 参数微调幅度,你就能像真正的摄影师一样,指挥 Hy-Nomas 的镜头走位。

  • 人工智能
  • 媒体生成
  • 视频
  • 多模态
  • 计算机视觉
  • 深度学习
  • 模型量化
  • LoRA

【免费下载链接】Hy-Nomas

项目地址:https://ai.gitcode.com/tencent_hunyuan/Hy-Nomas
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

返回列表