解读游戏设计:AI助你从视频中快速获取玩法规则

向量数据库大模型机器学习

通过之前的文章《从创意到上线:用ChatGPT + Winsurf 快速开发HTML5小游戏的实战指南》,大家已经了解了如何通过AI工作流快速开发一个小游戏。然而,实际操作中我们常常遇到这样的情况:某款网上火爆的小游戏吸引了我们的注意,我们想要快速复制它的模式,但要深入分析其玩法设计,花费不少时间。有没有什么方法能快速提取出这款游戏的设计规则呢?今天,我就来分享一个思路,帮助你通过游戏解说视频快速获取游戏玩法设计规则。

方案构思

一款游戏火起来时,网上通常会有大量的玩法解说视频。我第一想到的方案就是利用AI的多模态能力,理解这些解说视频中的内容,然后总结出游戏的设计规则。经过查阅资料,我发现微软在2023年发布了一篇论文《MM-VID: Advancing Video Understanding with GPT-4V(ision)》。[1]这篇论文的核心思想是结合GPT-4V的能力,利用视觉、音频和语音等多方面工具,实现高级的视频理解。具体流程可以分为以下几步:

  1. 场景识别 :检测视频中的视觉场景变化,把完整的视频切分成多个场景(每个场景有开始和结束的时间点)。
  2. 场景切割 :根据每个场景的时间范围,将视频分割成多个子视频,便于后续处理。
  3. 语音识别 :将视频中的语音转换成文本,作为多模态识别的补充。
  4. 子视频描述生成 :使用GPT-4V逐个理解每个子视频,并生成描述。
  5. 视频描述生成 :整合音频文本和所有子视频描述,再用GPT生成连贯的视频描述文本。

这个思路看起来比较适用于我们的需求:通过游戏解说视频快速生成游戏玩法设计规则。接下来,我们就按照论文中的思路一步步实现,看看最终的效果如何。picture.image

“ 以下所有的实践代码,我已在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  

  1. 语音识别

接着,使用 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

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
CV 技术在视频创作中的应用
本次演讲将介绍在拍摄、编辑等场景,我们如何利用 AI 技术赋能创作者;以及基于这些场景,字节跳动积累的领先技术能力。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论