游戏风格NPC对话视频剪辑
经过20个《GTA V》片段验证的方法(参见 examples/gta-v、DirectorClips.cs、tools/shoot.ps1、tools/edit.ts):
每个片段是一个5-10秒的对话交换,看起来像玩家日常游戏中的一瞬间。
编写脚本
clip: 水枪
at: grove 街道地点、家,或"x, y, z, heading"
time: 21 一天中的小时数
a: 玩家 谁先说:玩家、角色、或带有语音的行人模型
b: LamarDavis
line: Lamar,把枪放下。那只是水枪。
reply: 坚持说它仍然吓人,他是Grove街上最可怕的人 (LLM实时生成)
# 或锁定已批准的台词:
say: [喊叫] 怕一把水枪?这可是Grove街上最吓人的玩意儿!
do: none 要播放的动作(动作名称,或none)
NPC独白片段(警察和乡下佬、海军和游客)效果最佳:隐藏玩家,让两个NPC自由对话。
像游戏画面一样
- 固定游戏摄像机: 每一帧都设置跟随摄像机的视角模式及其相对于玩家的朝向和俯仰,并禁用观察输入。固定视角即可;电影摄像机看起来像预告片。
- 框住搭档: 让搭档站在前方稍侧(向前2米,向右1米),这样玩家不会遮挡他们;在周围进行射线检测并避开墙壁、报摊和门口。
- 固定地面: 吸附到人行道,向下射线检测地面(遮阳篷和屋顶会欺骗高度查找)。
- 干净画面: 打开游戏HUD和字幕,关闭Mod的任何内容(无通知、开发者面板或帮助文本)。在录制期间抑制电话和帮助文本。
- 先渲染,再播放: 在片段开始前写回复、选择动作并渲染两个角色的语音,然后背对背播放。没有人需要在镜头前等待GPU。
录制、同步、剪辑
shoot.ps1:将游戏窗口置前,重新加载Mod,录制屏幕(ffmpegddagrab)和PC音频(WASAPI loopback)为独立文件,启动脚本,并在失去焦点时重新开始捕获(游戏会暂停)。- 同步: 每个捕获片段以白色闪烁和1kHz蜂鸣声(带时间戳)开始;Mod记录
clip_start/clip_end以及每条台词的audio_on/audio_off到时间线。 edit.ts --clips <take>:每个片段生成一个MP4文件,从clip_start前0.2秒开始到最后一个词或动作结束,裁剪到游戏窗口,宽度1920,音量标准化。它将片段限制在10秒,并报告任何会被截断的台词,而不是直接裁剪。- 重拍,不删词: 超长的片段会被重新拍摄(新渲染时长不同)或精简几个词。使用
say:/do:锁定已批准的回复,以便重拍保留效果。 - 发送前预览: 每个片段一帧组成的联系表(
ffmpeg -ss 5 ... tile=5x4)能快速发现隐藏的搭档或画面中的墙壁。
注意事项
- 什么也没发生 / Mod重新加载后未返回。 Windows Smart App Control拒绝新DLL(代码完整性事件3077)。先测试加载新版本;保留上次能加载的版本。
- 录制片段日志中没有视频开始。 另一个进程占用了日志文件(Windows上的
tail -F会阻塞写入者)。不要监视其他脚本正在追加的文件;监视另一个文件。 - 电话或帮助文本在片段中间出现。 在片段播放的每一帧中都将其抑制。
- 片段中的语音是克隆的。 在发布片段之前,由人工决定;声明是AI生成的。