通过之前的文章《从创意到上线:用ChatGPT + Winsurf 快速开发HTML5小游戏的实战指南》,大家已经了解了如何通过AI工作流快速开发一个小游戏。然而,实际操作中我们常常遇到这样的情况:某款网上火爆的小游戏吸引了我们的注意,我们想要快速复制它的模式,但要深入分析其玩法设计,花费不少时间。有没有什么方法能快速提取出这款游戏的设计规则呢?今天,我就来分享一个思路,帮助你通过游戏解说视频快速获取游戏玩法设计规则。
方案构思
一款游戏火起来时,网上通常会有大量的玩法解说视频。我第一想到的方案就是利用AI的多模态能力,理解这些解说视频中的内容,然后总结出游戏的设计规则。经过查阅资料,我发现微软在2023年发布了一篇论文《MM-VID: Advancing Video Understanding with GPT-4V(ision)》。[1]这篇论文的核心思想是结合GPT-4V的能力,利用视觉、音频和语音等多方面工具,实现高级的视频理解。具体流程可以分为以下几步:
- 场景识别 :检测视频中的视觉场景变化,把完整的视频切分成多个场景(每个场景有开始和结束的时间点)。
- 场景切割 :根据每个场景的时间范围,将视频分割成多个子视频,便于后续处理。
- 语音识别 :将视频中的语音转换成文本,作为多模态识别的补充。
- 子视频描述生成 :使用GPT-4V逐个理解每个子视频,并生成描述。
- 视频描述生成 :整合音频文本和所有子视频描述,再用GPT生成连贯的视频描述文本。
这个思路看起来比较适用于我们的需求:通过游戏解说视频快速生成游戏玩法设计规则。接下来,我们就按照论文中的思路一步步实现,看看最终的效果如何。
“ 以下所有的实践代码,我已在github上开源:https://github.com/skindhu/AI-GAME-RULE-EXTRACTOR,欢迎star。
工具选择
为了实现上述方案,我们需要以下几个工具:
1. scenedetect库
scenedetect
是一个用于视频场景检测的 Python 库,主要功能是自动识别视频中的场景切换点(即不同镜头之间的过渡)。它通过分析视频帧之间的视觉差异,利用多种算法检测场景变化。我们可以用这个库来识别游戏视频中的不同场景。
2. Whisper
Whisper
是 OpenAI 的语音识别系统,能够准确高效地将语音内容转换为文本。我们可以用它将游戏视频中的解说语音转成文本,辅助完善最终的游戏规则。
3. ffmpeg
ffmpeg
是一个强大的视频处理工具,大家应该都不陌生。我们可以用它将识别出的场景分割成一系列视频片段。
4. gpt-4o-mini
gpt-4o-mini
是 OpenAI GPT-4o 模型的简化版,选择mini版是为了在效果和成本之间取得平衡。我们将利用它的多模态能力来生成子视频描述和最终的视频描述。
方案实现
1. 场景识别
首先,使用 scenedetect
库对解说视频进行场景识别。
def detect\_scenes(video\_path):
"""
Detect scene changes in the video
Args:
video\_path (str): Path to the video file
Returns:
list: List of scenes with start and end times
"""
video\_manager = VideoManager([video\_path])
scene\_manager = SceneManager()
scene\_manager.add\_detector(ContentDetector())
video\_manager.start()
scene\_manager.detect\_scenes(frame\_source=video\_manager)
scenes = scene\_manager.get\_scene\_list()
return scenes
返回的场景片段包括时间偏移和视频帧起始偏移,例如:
“ 0 = (00:00:00.000 [frame=0, fps=30.000], 00:00:00.667 [frame=20, fps=30.000])
1 = (00:00:00.667 [frame=20, fps=30.000], 00:01:31.100 [frame=2733, fps=30.000])
...
2. 场景切割
根据识别出的场景,将原始视频分割成多个子视频。
def split\_video(video\_path, scene\_list, output\_dir):
"""
Split video into multiple clips based on scene list
Args:
video\_path (str): Path to the input video
scene\_list (list): List of scenes with start and end times
output\_dir (str): Directory to save the output clips
Returns:
list: List of paths to the created clips
"""
clip\_paths = []
for i, scene in enumerate(scene\_list):
start, end = scene[0].get\_seconds(), scene[1].get\_seconds()
duration = end - start
clip\_path = os.path.join(output\_dir, f"clip\_{i+1}.mp4")
try:
command = [
'ffmpeg', '-y',
'-i', video\_path,
'-ss', f"{start:.2f}",
'-t', f"{duration:.2f}",
'-map', "0",
'-vcodec', 'libx264', # 重编码
'-acodec', 'aac',
'-avoid\_negative\_ts', 'make\_zero',
clip\_path
]
subprocess\_call(command, logger="bar")
clip\_paths.append(clip\_path)
except Exception as e:
print(f"Error processing clip {i+1}: {e}")
continue
return clip\_paths
- 语音识别
接着,使用 Whisper 将解说视频中的语音转换成文本。
def recognize\_speech(video\_path):
"""
Perform speech recognition on video using WhisperX
Args:
video\_path (str): Path to the video file
Returns:
str: Transcribed text from the video
"""
try:
logger.debug(f"Loading WhisperX model for {video\_path}")
model = whisperx.load\_model("large", device='cpu', compute\_type="float32")
logger.debug("Starting transcription")
result = model.transcribe(video\_path)
logger.debug("Processing segments")
segments = result["segments"]
# 合并所有文本片段,保留时间戳信息
transcription = []
for segment in segments:
time\_start = segment.get("start", 0)
time\_end = segment.get("end", 0)
text = segment.get("text", "").strip()
if text:
transcription.append(f"[{time\_start:.2f}-{time\_end:.2f}] {text}")
text = "\n".join(transcription)
logger.debug(f"Transcription completed, generated {len(transcription)} segments")
return text
except Exception as e:
logger.error(f"Error during speech recognition: {str(e)}")
logger.debug("Returning empty transcription due to error")
return"No transcription available."
4. 生成子视频描述
利用 gpt-4o-mini
理解每个子视频片段,生成详细的描述。为了节省成本和时间,我们不会提取所有帧,而是抽取10帧进行分析。同时,在prompt设计中我们需要让模型在理解视频帧时专注于游戏规则的提取。
def generate\_clip\_descriptions(clip\_paths, scenes, num\_frames=10):
"""
Generate descriptions for video clips using GPT-4V
Args:
clip\_paths (list): List of paths to video clips
scenes (list): List of scenes with timing information
num\_frames (int): Number of frames to sample from each clip
Returns:
str: Combined descriptions of all clips
"""
# 检查缓存
if DEBUG\_MODE and os.path.exists(DESCRIPTIONS\_CACHE\_FILE):
with open(DESCRIPTIONS\_CACHE\_FILE, 'r', encoding='utf-8') as f:
return f.read()
descriptions = []
for clip\_path, scene in zip(clip\_paths, scenes):
clip = VideoFileClip(clip\_path)
frames = sample\_frames(clip, num\_frames)
images = [Image.fromarray(frame) for frame in frames]
image\_files = [convert\_to\_base64(image) for image in images]
content = []
prompt = (
"你是一位资深的游戏分析师,擅长记录详细的游戏机制和规则。"
"根据以下游戏画面,提供非常详细的分析,重点关注:\n\n"
"1. 玩家操作与控制:\n"
" - 所有可能的玩家交互\n"
" - 具体的按钮组合或手势\n"
" - 移动机制及限制\n"
" - 操作时机和冷却时间\n\n"
"2. 游戏界面元素:\n"
" - 所有UI组件及其功能\n"
" - 状态指示器和计量器\n"
" - 菜单系统和导航\n"
" - 视觉反馈机制\n\n"
"3. 游戏玩法机制:\n"
" - 详细的互动系统\n"
" - 战斗或竞争机制\n"
" - 资源管理系统\n"
" - 增强道具和特殊能力\n\n"
"4. 得分与进度:\n"
" - 积分计算方法\n"
" - 成就条件\n"
" - 关卡进度标准\n"
" - 排名或评分系统\n\n"
"5. 环境互动:\n"
" - 物体交互\n"
" - 地形影响\n"
" - 环境危害\n"
" - 互动元素\n\n"
"请描述你观察到的每一个细节,无论多么微小。\n"
f"时间范围:{scene}"
)
content.append({"type": "text", "text": prompt})
for image\_file in image\_files:
content.append({
"type": "image\_url",
"image\_url": {"url": f"data:image/jpeg;base64,{image\_file}"},
})
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{
"role": "user",
"content": content
}
],
max\_tokens=2000,
)
descriptions.append(response.choices[0].message.content)
result = "".join(descriptions)
if DEBUG\_MODE:
with open(DESCRIPTIONS\_CACHE\_FILE, 'w', encoding='utf-8') as f:
f.write(result)
return result
5. 生成最终游戏规则
结合所有子视频描述、语音转文本以及人工编辑的游戏背景信息,使用 gpt-4o-mini 生成最终的游戏规则。在设计提示时,需让模型专注于从视频描述中提取游戏规则。
def generate\_rules(clip\_descriptions):
"""
Generate game rules based on clip descriptions and background information
Args:
clip\_descriptions (str): Combined descriptions of all video clips
Returns:
str: Generated game rules document
"""
try:
# 删除已有的规则文件
if os.path.exists(GAME\_RULES\_FILE):
os.remove(GAME\_RULES\_FILE)
# 读取背景信息
background\_info = read\_background()
# 构建提示
prompt = (
"你是一位顶级游戏设计师,任务是创建最全面、详细的游戏文档。"
"根据以下的游戏画面分析和背景信息,生成详尽的游戏规则文档,确保与游戏的设定和设计理念一致。\n\n"
)
if background\_info:
prompt += "游戏背景信息:\n" + background\_info + "\n\n"
prompt += (
"请创建一个详细的游戏规则文档,涵盖游戏的各个方面:\n\n"
"1. 核心游戏机制:\n"
" - 基本的游戏循环\n"
" - 玩家动作及其影响\n"
" - 控制方案和输入方法\n"
" - 时间机制和动作顺序\n"
" - 移动系统和物理交互\n\n"
"2. 游戏系统:\n"
" - 积分机制说明\n"
" - 进度跟踪系统\n"
" - 资源管理规则\n"
" - 经验和升级系统\n"
" - 经济和货币系统\n\n"
"3. 战斗与互动:\n"
" - 战斗机制详解\n"
" - 伤害计算系统\n"
" - 角色或单位互动\n"
" - 状态效果及其持续时间\n"
" - 连击系统和特殊动作\n\n"
"4. 特殊机制:\n"
" - 所有增强道具及其效果\n"
" - 特殊能力和冷却时间\n"
" - 独特的玩法元素\n"
" - 环境互动\n"
" - 隐藏机制和秘密\n\n"
"5. 游戏流程:\n"
" - 详细的回合/比赛结构\n"
" - 完整的胜负条件\n"
" - 关卡进度要求\n"
" - 游戏模式和变体\n"
" - 竞赛或比赛规则\n\n"
"6. 用户界面:\n"
" - 完整的HUD元素描述\n"
" - 菜单系统导航\n"
" - 状态指示器及其含义\n"
" - 视觉和音频反馈系统\n\n"
"7. 高级机制:\n"
" - 专家级技巧\n"
" - 策略考量\n"
" - 元游戏元素\n"
" - 高级积分策略\n\n"
"请将其格式化为专业的游戏设计文档,包含清晰的章节、小节和示例。"
"尽可能包含具体的数字、时间和条件。详细解释基础和高级概念,确保所有规则和机制与提供的背景信息一致。\n\n"
"游戏画面分析:\n"
)
prompt += clip\_descriptions
logger.debug("Sending prompt to GPT-4")
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{
"role": "user",
"content": prompt
}
],
max\_tokens=4000,
)
result = response.choices[0].message.content
# 保存结果到文件
with open(GAME\_RULES\_FILE, 'w', encoding='utf-8') as f:
f.write(result)
logger.debug("Successfully generated and saved game rules")
return result
except Exception as e:
logger.error(f"Error generating game rules: {str(e)}")
raise
效果展示
根据论文中的思路在游戏规则提取这个场景进行尝试后,效果到底如何呢,我们来通过一个游戏解说视频尝试一下。
解说视频
提取出的游戏规则
# 开心消消乐游戏设计文档
## 游戏标题:
开心消消乐
## 游戏类型:
三消游戏
## 游戏背景:
游戏设定在一个充满活力、色彩缤纷的世界中,有可爱的角色和神奇的生物。环境特色是一系列奇幻的背景,每个关卡都呈现与这些角色相关的独特挑战。玩家需要通过匹配和消除网格中的物品来帮助这些生物,从而在游戏关卡中取得进展。
## 核心理念:
主要玩法围绕经典的三消机制展开,玩家通过交换相邻的角色或物品来创建三个或更多相同物品的连线。这样做可以将它们从棋盘上清除,获得积分,并触发连锁效应,从而获得更高的分数。玩家需要在管理有限资源的同时制定策略。
## 目标玩家:
游戏吸引广泛的人群,特别是休闲游戏玩家、益智游戏爱好者和喜欢视觉上吸引人、有趣和轻松游戏的玩家。它适合所有年龄段,但主要针对年轻受众和寻求休闲游戏体验的玩家。
## 游戏角色:
1. **魔法鸟**:游戏玩法的基石,在升级和达成连击方面起着关键作用。
2. **电力宝宝**:一个有用的伙伴,匹配时可以清除行或列。
3. **向日葵**:一个特殊物品,正确使用时可以产生奖励机制。
## 特色功能:
- **道具**:各种道具帮助玩家一次消除更多物品。
- **奖励关卡**:达成特定条件的关卡会获得更多奖励(例如,在规定步数内完成)。
- **每日挑战**:为玩家提供额外目标,奖励特殊物品或货币。
## 开发背景:
开心消消乐的开发目标是创造一个引人入胜、适合家庭的游戏,将策略与乐趣相结合。设计团队专注于明亮的色彩图形、流畅的动画和令人上瘾的游戏循环,鼓励玩家不断回来体验更多。
---
# 游戏规则文档
## 1. 核心游戏机制
### 1.1 基本游戏循环
- 玩家交换相邻物品以创建三个或更多相同角色的组合。
- 匹配会从网格中清除物品,获得积分,并可能激活特殊能力或道具。
- 玩家后续的操作可能导致连锁匹配,进一步增加分数。
### 1.2 玩家操作及效果
- **交换**:改变两个相邻角色的位置。(效果:如果形成匹配,这些角色会被清除。)
- **点击道具**:点击道具以激活其功能。(效果:通常会清除额外的角色或影响网格。)
### 1.3 控制方案
- **触摸控制**:点击选择物品,滑动交换相邻物品。
- **按钮输入**:使用屏幕上的按钮激活道具和特殊能力。
### 1.4 时间机制和动作序列
- 玩家必须在计时器耗尽前完成关卡(通常每关60-120秒)。
- 某些关卡可能要求玩家在有限步数内(如20步)达到分数阈值。
### 1.5 移动系统和物理交互
- 角色放置在固定网格上,限制为水平或垂直移动。
- 重力将角色下拉以填补清除的空间,创造新的匹配机会。
## 2. 游戏系统
### 2.1 计分机制
- 根据匹配的角色数量获得积分:
- 3个角色 = 10分
- 4个角色 = 20分(加特殊效果)
- 5个角色 = 30分(加更大的特殊效果)
### 2.2 进度追踪系统
- 每个关卡完成后根据表现获得星星(1-3颗),影响未来解锁。
- 通过关卡地图显示进度,有已完成关卡的视觉指示器。
### 2.3 资源管理规则
- 玩家在每个关卡中管理移动次数和道具。
- 可以赚取和花费游戏内货币来升级或购买特殊道具。
### 2.4 经验和等级系统
- 玩家通过完成关卡获得经验,解锁新的挑战和游戏模式。
- 升级可以获得特殊道具或角色的使用权。
### 2.5 经济和货币系统
- 玩家可以通过有效完成关卡赚取货币,并可以花费在道具上或继续失败的关卡。
## 3. 战斗和互动
### 3.1 战斗机制
- 互动主要是战略性匹配而非传统意义上的战斗。
- 竞争可能出现在基于时间的挑战或高分机制中。
### 3.2 伤害计算系统
- 不是计算伤害,而是根据完成的匹配和连击获得积分。
### 3.3 角色互动
- 特殊角色在匹配或清除时可能有独特能力。
- 角色也可以与环境效果和奖励互动。
### 3.4 状态效果和持续时间
- 道具可能有冷却时间(如10-15秒)才能再次使用。
- 某些关卡可能引入障碍,限制行动直到解决。
### 3.5 连击系统和特殊移动
- 创建角色组合可以产生特殊移动,清除棋盘上更大的区域。
## 4. 特殊机制
### 4.1 道具及其效果
- **直线消除道具**:清除整行或整列。
- **炸弹道具**:清除更大区域,通常是3x3网格。
- **神秘盒子**:匹配时激活,产生随机道具。
### 4.2 特殊能力和冷却时间
- 每个道具都有冷却期。例如,炸弹道具的冷却时间可能是30秒。
### 4.3 独特游戏元素
- 特定关卡可能引入独特的游戏机制,如收集配额或限时挑战。
### 4.4 环境互动
- 与地形的互动(如打破冰块)可以改变网格的工作方式。
### 4.5 隐藏机制和秘密
- 通过特定匹配组合或达到特定分数可以解锁隐藏关卡或隐藏奖励。
## 5. 游戏流程
### 5.1 回合/对局结构
- 每个游戏会话由多个回合组成,玩家在每个回合中争取获得分数或星星。
### 5.2 胜利/失败条件
- 玩家通过在限制条件内清除所有必需目标获胜;用尽移动次数或未完成目标则失败。
### 5.3 关卡进度要求
- 必须以最低分数令人满意地完成关卡才能解锁后续关卡。
### 5.4 游戏模式和变体
- 各种模式包括限时对局、限制移动次数,或无尽模式让玩家尽可能获得高分。
### 5.5 锦标赛或竞技规则
- 玩家可以根据在特定限时活动或挑战中获得的高分在排行榜上竞争。
## 6. 用户界面
### 6.1 HUD元素描述
- **分数显示**:显示当前分数和目标。
- **计时器**:显示有时间限制的关卡中的剩余时间。
- **道具库存**:计算游戏中剩余可用的道具数量。
### 6.2 菜单系统导航
- 多个标签页用于关卡、道具、设置和成就,通常在激活前保持低可见度。
### 6.3 状态指示器和含义
- 星级评定系统显示玩家表现(1-3星),在关卡完成后显示。
### 6.4 视觉和音频反馈系统
- 星星或其他奖励通过动画视觉庆祝成就,声音效果增强反馈。
## 7. 高级机制
### 7.1 专家级技巧
- 开发复杂策略,如创建更大的连击或有效利用道具。
### 7.2 策略考虑
- 分析棋盘状态并最大化移动次数以高效达成目标。
### 7.3 元游戏元素
- 玩家可以讨论和分享策略,或参与论坛以获得高分战术的见解。
### 7.4 高级得分策略
- 高效利用道具和创建连锁匹配可以带来显著的分数倍增器。
---
本游戏规则文档旨在通过详细说明所有游戏玩法机制、系统和玩家互动,提供对"开心消消乐"的全面理解。它既可以作为新玩家的参考,也可以作为游戏提供的更广泛策略深度的指南。
可以看出,我们的游戏解说视频其实较为简单,但是提取出的规则已经相对比较详细,我们可以再通过GPT进行补充完善即可。
总结
通过以上步骤,我们可以利用AI的多模态能力,从热门游戏的解说视频中快速提取出游戏的玩法设计规则。这不仅大大节省了分析时间,还能帮助我们更高效地复制和创新游戏模式。以上的实践代码,我已在github上开源:https://github.com/skindhu/AI-GAME-RULE-EXTRACTOR,欢迎star。
参考资料
[1] 《MM-VID: Advancing Video Understanding with GPT-4V(ision)》。: https://arxiv.org/abs/2310.19773