CameraCtrl提示词工程入门:如何用cameractrl_prompts.json精准控制视频生成内容与种子
CameraCtrl提示词工程入门:如何用cameractrl_prompts.json精准控制视频生成内容与种子
【免费下载链接】CameraCtrl项目地址: https://gitcode.com/gh_mirrors/ca/CameraCtrl
CameraCtrl 是一款支持相机轨迹控制的文生视频扩散模型(基于 Stable Diffusion 1.5 + AnimateDiffV3),本文带你用官方提示词文件assets/cameractrl_prompts.json精准控制 AI 视频生成内容与随机种子:从 JSON 结构拆解、提示词写法规律,到固定种子与完整推理命令,一次跑通。
🎬 一文看懂:提示词 + 轨迹 = 可控视频
CameraCtrl 的输入是"三件套",缺一不可:
| 输入 | 文件示例 | 作用 |
|---|---|---|
| 文本提示词 | assets/cameractrl_prompts.json | 决定视频"生成什么内容" |
| 相机轨迹 | assets/pose_files/0f47577ab3441480.txt | 决定镜头"怎么运动" |
| 随机种子 | JSON 中的seeds字段 | 固定随机性,保证结果可复现 |
轨迹文件每行描述一帧相机的位置与朝向(第 1 行为源视频地址,推理时自动跳过);项目还附带了对应的真实参考视频(assets/reference_videos/)和轨迹可视化图(assets/trajectories_vis/),方便你对照"相机应该怎么动"。
📄 cameractrl_prompts.json 结构拆解:提示词与种子一一对应
官方示例文件非常简洁,核心就是两个等长数组:
{ "prompts": [ "A serene mountain lake at sunrise, with mist hovering over the water.", "A horse is eating grass on the grassland." ], "seeds": [ 6426918851609095805, 6426918851609095805 ] }规则很简单:第 i 条提示词对应第 i 个种子。推理脚本inference.py按索引逐条配对,因此两个数组必须等长。
此外 JSON 还支持两种可选写法:
- 负面提示词:加入
negative_prompts数组(等长),并在命令中加--use_negative_prompt开关,用于抑制你"不想要"的画面元素; - 字典形式:
prompts元素也可写成{"caption": "..."},脚本会自动提取其中的caption字段。
✍️ 提示词怎么写:官方 11 条示例的 4 条规律
分析assets/cameractrl_prompts.json里的全部示例(从"马在草原吃草"到"精灵宫殿瀑布"),可以总结出 4 条实用规律:
- 一句话 = 主体 + 动作 + 场景。例如 "A horse is eating grass on the grassland.",画面元素具体、不堆砌;
- 用英文描述,风格与 Stable Diffusion 训练数据一致;
- 长度适中:最短 3 个词("Turtle swimming in ocean."),最长也不超过两行,避免生僻词;
- 注意副作用:输出的 MP4 文件名会直接取提示词(空格替换为下划线),所以别在提示词里放特殊符号。
想生成房地产风格视频?项目提供了领域提示词示例assets/cameractrl_prompts_realestate10k.json(厨房、浴室、卧室等 10 条室内场景描述),配合 RealEstate10K 图像 LoRA(通过--image_lora_ckpt加载)即可出图。
🎲 种子机制详解:固定随机性,让视频生成可复现
"换一次种子、换一个视频"是扩散模型的基本特性,CameraCtrl 把它做成了逐条可指定的精细控制:
- 命令中加上
--use_specific_seeds开关后,脚本会读取 JSON 的seeds数组,对每一条提示词单独调用manual_seed(...)再采样; - 不加该开关时,随机数生成器以固定初始值顺序推进,不同提示词之间互不相同,但无法单独复现某一条;
- 同一个种子可以复用给不同提示词(官方示例中 3 条提示词共用了一个种子),方便做"同随机性、不同文案"的对照实验。
💡 实战建议:满意的结果立刻记下它的 seed 写回 JSON,下次一键复现;不满意就换种子多抽几次。
🚀 一键推理命令:完整参数与默认值速查
先克隆仓库并配置环境(git clone https://gitcode.com/gh_mirrors/ca/CameraCtrl,然后conda env create -f environment.yaml),再执行官方示例命令:
python -m torch.distributed.launch --nproc_per_node=8 --master_port=25000 inference.py \ --out_root ./output \ --ori_model_path /path/to/stable-diffusion-v1-5 \ --unet_subfolder unet_webvidlora_v3 \ --motion_module_ckpt /path/to/ADV3_motion_module.ckpt \ --pose_adaptor_ckpt /path/to/CameraCtrl.ckpt \ --model_config configs/train_cameractrl/adv3_256_384_cameractrl_relora.yaml \ --visualization_captions assets/cameractrl_prompts.json \ --use_specific_seeds \ --trajectory_file assets/pose_files/0f47577ab3441480.txt \ --n_procs 8常用参数速查表(完整定义见inference.py):
| 参数 | 默认值 | 说明 |
|---|---|---|
--visualization_captions | 必填 | 提示词文件路径,支持 JSON 或 TXT |
--use_specific_seeds | 关 | 启用 JSON 中逐条种子 |
--use_negative_prompt | 关 | 启用 JSON 中负面提示词 |
--trajectory_file | 必填 | 相机轨迹 txt 文件 |
--n_procs | 8 | 参与并行的 GPU 数 |
--image_width / --image_height | 384 / 256 | 输出视频分辨率 |
--video_length | 16 | 生成帧数 |
--num_inference_steps | 25 | 去噪步数(越大越精细、越慢) |
--guidance_scale | 14.0 | 提示词遵循强度 |
🔧 进阶技巧:多 GPU 任务分配与轨迹调试
- 任务自动切分:
inference.py会把len(prompts)均分到--n_procs张卡,前len(prompts) % n_procs张卡多承担 1 条。官方 11 条提示词 + 8 卡,即 3 张卡各跑 2 条、5 张卡各跑 1 条; - 轨迹可视化:跑之前先用
tools/visualize_trajectory.py --pose_file_path assets/pose_files/0f47577ab3441480.txt把轨迹画成 3D 图,红色箭头表示位移、四面体朝向表示旋转,避免"盲跑"; - 个性化风格:通过
--personalized_base_model加载第三方写实风模型权重,可在同一套提示词工程下切换画面风格; - 换轨迹不换词:同一提示词配合
assets/pose_files/下不同轨迹文件反复推理,即可得到"同内容、不同运镜"的系列视频,这正是相机轨迹控制的价值所在。
❓ 常见问题 FAQ
问:为什么输出视频文件名是一串下划线英文?脚本用"_".join(caption.split(" "))把提示词转为文件名,方便对照来源;写提示词时避免冒号、斜杠等非法文件名字符即可。
问:seeds 数量能和 prompts 不一致吗?建议严格 1:1。脚本按下标取种子,数量不匹配会导致某条提示词取不到种子而报错。
问:只想快速看效果,能少写配置吗?可以。除--n_procs改为实际卡数外,其余参数(分辨率、步数、guidance)都有合理默认值,直接省略即可。
📌小结:掌握assets/cameractrl_prompts.json中prompts与seeds的等长配对关系,再配合--use_specific_seeds开关,你就能用最少的心智负担,稳定复现每一条 CameraCtrl 视频生成结果——这正是提示词工程在可控视频生成中的核心玩法。
【免费下载链接】CameraCtrl项目地址: https://gitcode.com/gh_mirrors/ca/CameraCtrl
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
