天马整合包“只看不玩”瘦身指南:删ROM留媒体,打造50G怀旧游戏博物馆
2026/9/9 10:16:20 网站建设 项目流程

平时折腾天马整合包时,很多朋友会发现,自己新买的大容量硬盘很快就被动辄几百 GB 的“全家桶”塞满了。这些整合包数据量非常惊人,真正会被反复游玩的可能只有其中一小部分,但你又不想错过漂亮的封面墙、游戏简介和预览视频。于是一种新玩法出现了:把 ROM 全部删掉,只保留封面、简介和视频素材,让天马变成一个 50G 级别的“怀旧游戏数字博物馆”,只看不玩。这篇文章就围绕这个思路,梳理一套完整的精简与配置方案,包含目录结构拆解、批处理与 Python 脚本示例、常见问题排查,以及工程实践上的注意事项。如果你手头正好有一个庞大的天马整合包,又希望快速把它改造成适合浏览的媒体库,这篇文章可以直接照做。

需要提前说明的是,天马模拟器本身是一个开源前端方案,它不会自动包含任何游戏内容。ROM 文件的版权通常归属于原游戏公司或个人,请确保你只是对自己拥有合法备份、或已经获得授权的文件做整理。本文只讨论前端资源整理和目录配置方法,不提供任何 ROM 下载渠道。

1. 为什么有人会把天马整合包改成“只看不玩”版本

在开始动手之前,先搞清楚这个需求背后的原因,以及天马模拟器的基本工作原理,后面配置起来会更顺手。

1.1 天马模拟器前端到底是什么

天马模拟器并不是一个具体的游戏机模拟器,它本质上是一套基于 Pegasus Frontend 的整合方案。Pegasus 是一个跨平台的开源游戏前端,支持 Windows、Android、Linux 等系统。它的作用很简单:把游戏 ROM、模拟器核心、封面图片、标题截图、游戏简介、预览视频等信息集中展示在一个漂亮的图形界面里,用户可以像逛数字商店一样浏览自己的游戏库。

为了保证“开箱即用”,社区作者会把 Pegasus 前端、RetroArch 多合一模拟器、各个平台的模拟器核心、BIOS 文件、中文游戏列表、封面图、简介和预览视频打包在一起,做成一个庞大的“天马整合包”。这种整合包的优点是非常省心,下载解压就能玩;缺点是体积巨大,常见版本动辄 400G、600G,甚至超过 1T。很多人下载之后,发现硬盘根本没有足够空间放下完整版,或者自己只是喜欢浏览游戏封面和回忆片头动画,并不想真正花时间通关每款游戏。

1.2 “删 ROM、留媒体”的场景从哪里来

“删掉 ROM,只保留封面简介视频”这句话描述的场景很典型:用户希望保留天马前端的浏览体验,特别是封面墙、简介文字和视频预览,但又不想被几百 GB 的 ROM 文件占满硬盘。

我见过不少玩家会把天马整合包当成一本“游戏百科全书”来使用。下班之后打开前端,听听熟悉的片头音乐,看看当年的游戏封面,回忆一下童年,这种体验本身就有价值,不一定非要打开 ROM 去玩。如果只是浏览内容,ROM 文件其实是多余的,因为它们占用了绝大部分体积。一个包含 PS2、Wii、NGC 等大容量平台的整合包,ROM 可能是媒体素材体积的好几倍。删掉 ROM 之后,整个资源库可能从四五百 GB 缩减到 50G 左右,正好符合“只看不玩”的需求。

从技术角度看,这个操作完全可行。天马前端的浏览依赖的是 metadata.pegasus.txt 文件中描述的游戏条目,以及封面、视频等媒体文件;ROM 文件只负责“启动游戏”这一步。只要媒体资源完整,前端依旧可以展示一个漂亮且信息丰富的游戏库,只是点击“启动”时会提示找不到文件或无法运行。对“只看不玩”的用户来说,这正是想要的效果。

1.3 精简前后的体积对比与用户收益

这里给出一个粗略的经验参考值。在天马整合包中,ROM 文件通常占总体积的 80% 到 90% 以上,媒体素材(封面图、标题图、截图、预览视频)相对小很多。例如一个 300G 的整合包,ROM 可能占了 250G 左右,媒体素材大约 40G 到 50G,前端程序和模拟器核心约占几个 G。把这个整合包改造成“只看不玩”的精简版之后,体积可以压到 50G 左右。

对用户来说,收益主要体现在三个方面:第一,普通硬盘也能轻松容纳,不再需要为了一个资源库单独购买大容量机械硬盘;第二,启动前端的加载速度变快,因为不需要再扫描大量 ROM 文件;第三,这个精简包可以随意复制、分享给同样“只想看不想玩”的朋友,前提是你拥有对应的使用权限。接下来的章节,会围绕这个目标一步步操作。

2. 动手前先看懂天马整合包目录结构

想安全地删 ROM、留媒体,前提是准确理解天马整合包的目录结构。不同作者制作的整合包会有细节差异,但主流结构非常相似,通常包含三个重要区域:Pegasus 前端程序区、roms 游戏文件区、media 媒体素材区,以及一串 metadata.pegasus.txt 元数据文件。

2.1 顶层目录的三块核心内容

假设你解压了一个天马整合包,常见的目录结构长这样:

D:\SkyEmu\ ├─ Pegasus\ │ ├─ Pegasus.exe │ ├─ themes\ │ └─ ... ├─ roms\ │ ├─ fc\ │ │ ├─ 魂斗罗.nes │ │ └─ ... │ ├─ md\ │ │ └─ ... │ └─ ... ├─ media\ │ ├─ fc\ │ │ ├─ box_front\ │ │ ├─ video\ │ │ └─ ... │ └─ ... ├─ metadata\ │ ├─ fc.pegasus.txt │ ├─ md.pegasus.txt │ └─ ... └─ ra_data\ ├─ retroarch.exe ├─ cores\ └─ system\

这里的Pegasus目录存放前端程序、主题和配置;roms目录按平台存放游戏 ROM 文件;media目录按平台存放封面、截图、视频等媒体资源;metadata目录存放每个平台对应的元数据文件;ra_data目录则是 RetroArch 模拟器核心和 BIOS 文件所在的位置。

对“只看不玩”的改造来说,核心动作非常清楚:保留Pegasusmediametadata,并把roms下的真实 ROM 删除或替换成占位文件。在修改之前,建议先完整浏览一遍目录结构,确认你的整合包没有特殊设计,避免误删关键文件夹。

2.2 metadata.pegasus.txt 中游戏条目怎么定义

天马前端通过 metadata.pegasus.txt 文件来识别游戏条目,这是一种纯文本格式,基本语法是一行一个键值对。一个最小游戏条目通常包含game关键字、file路径、name名称和若干assets媒体属性。

下面是一个简化但典型的示例:

collection: FC extension: nes game: file: roms/fc/魂斗罗.nes name: 魂斗罗 (日版) description: 经典横版射击游戏,玩家扮演特种部队队员,突破重重防线。 developer: Konami publisher: Konami genre: 横向射击 release: 1987-02-09 players: 2 assets.box_front: media/fc/box_front/魂斗罗.png assets.video: media/fc/video/魂斗罗.mp4

其中file字段告诉前端这个游戏条目对应的 ROM 文件路径,assets.box_front指向封面图,assets.video指向预览视频。Pegasus 在浏览模式中读取这些元数据,并在封面墙中显示游戏名、封面图和简介;当用户点击“启动”时,前端会根据file字段找到 ROM,并调用配置好的模拟器核心运行游戏。

所以,如果只是希望“能浏览、不能真正运行”,可以从file字段入手。最简单的做法是删掉真实的 ROM 文件,同时保留 metadata 中的描述信息和媒体路径;更稳妥的做法是保留一个 0 字节占位文件,确保前端仍能正确识别和显示游戏条目。

2.3 媒体资源是怎么和游戏条目绑定的

天马前端支持为每个游戏条目添加多种媒体资源。常见的有assets.box_front(正面封面)、assets.box_back(背面封面)、assets.screenshot(游戏截图)、assets.titlescreen(标题画面)、assets.video(预览视频)。在一个制作精良的天马整合包中,每个游戏几乎都配有封面图和一段短视频,这些资源共同构成了吸引人的浏览界面。

媒体资源通过相对路径绑定到游戏条目上。路径通常以整合包根目录作为基准,例如media/fc/box_front/魂斗罗.png表示根目录下的media/fc/box_front文件夹中的图片。在实际包内,路径命名可能略有区别,有些作者会使用media/FC大写目录,有些则会直接使用中文目录名。

在精简时,只要确保 metadata 中引用的媒体文件仍然存在,前端就能正常显示封面和视频。这也是为什么“删 ROM、保留媒体”能够成立:前端浏览体验依赖的是 metadata 和 media,而不是 roms 中的文件。理解了这一点后,下面就可以设计具体的精简方案。

3. 三种“只看不玩”精简方案选型

真正操作时,有不同的精简思路。有的方案追求绝对干净,有的方案更注重兼容性。下面对比三种常见方案,你可以根据自己的需求选择。

3.1 方案 A:直接删除 ROM 文件

方案 A 最简单直接:打开roms目录,把里面的游戏文件全部删除,保留mediametadata不动。操作完成后,前端启动时会读取 metadata 中定义的游戏条目,封面和简介正常展示;当你点击某个游戏,模拟器会因为找不到 ROM 文件而报错。

这个方案的优点是非常省事,不需要修改任何 metadata 文件,也不会因为改错格式导致前端显示异常。缺点也很明显:部分 Pegasus 版本在扫描集合时,会把“没有对应 ROM 文件”的游戏条目判定为不可用,甚至直接不显示;另外,如果整合包内置了游戏列表生成工具,工具可能认为游戏库不完整。因此,方案 A 比较适合那些“即使游戏条目不显示也没关系”的用户。

@echo off setlocal enabledelayedexpansion set "ROM_DIR=D:\SkyEmu\roms" if not exist "%ROM_DIR%" goto :eof for /r "%ROM_DIR%" %%F in (*.nes *.sfc *.md *.bin *.iso *.zip *.7z) do ( del "%%F" echo removed: %%F ) endlocal

前面这段批处理会把常见扩展名的 ROM 文件直接删除。但要注意,它也会误删 BIOS 和部分小容量数据文件,所以执行前一定先确认roms目录下没有需要保留的 BIOS 或存档文件。

3.2 方案 B:占位文件法,保留可浏览性

方案 B 是更推荐的思路:不是直接删除 ROM,而是把真实的 ROM 文件替换成同名的 0 字节占位文件。这样 metadata 中记录的file路径仍然存在,Pegasus 会认为游戏条目对应的文件是存在的,于是正常展示封面、简介和视频;当你点击启动时,模拟器尝试加载 0 字节文件,最终会因为文件内容无效而进入报错或返回界面。

这种方案的优点是兼容性最好,不需要修改 metadata,不会因为游戏条目缺失导致前端展示不完整;缺点是文件夹中仍然会有大量小文件,虽然不占空间,但文件数量很多,在复制或扫描时会稍微影响效率。

实现这个方法,可以在命令行中用脚本完成。下面是 Windows CMD 下的批处理方式:

@echo off setlocal enabledelayedexpansion set "ROM_DIR=D:\SkyEmu\roms" if not exist "%ROM_DIR%" goto :eof for /r "%ROM_DIR%" %%F in (*.nes *.sfc *.md *.bin *.iso *.zip *.7z) do ( if %%~zF GTR 10485760 ( del "%%F" type nul > "%%F" echo replaced: %%F ) ) endlocal

这段代码会遍历roms目录,把所有大于 10MB 的文件替换成 0 字节文件。设置 10MB 阈值主要是为了保护 BIOS、存档等小体积但可能需要的文件。如果你希望覆盖更彻底,可以把阈值调低,或者增加更多扩展名。

3.3 方案 C:重写 metadata,去除 launch 能力

方案 C 更彻底,也是工程上最“干净”的做法:重新整理 metadata.pegasus.txt,只保留游戏名称、简介和媒体资源字段,去掉file字段或把file指向一个空路径。这样前端看到的是一个“只能浏览、没有启动目标”的游戏条目,从逻辑上就不具备启动能力。

不过方案 C 对 metadata 的格式要求比较高。根据 Pegasus 文档,file字段通常用于标明可执行文件路径,如果完全省略,不同版本的前端行为可能不一致。有的版本会正常显示条目,有的版本则认为该条目不完整而跳过。所以如果你想采用方案 C,最好先在小范围内做实验,确认当前 Pegasus 版本的行为,再决定是否要批量重写所有 metadata。

game: name: 魂斗罗 (日版) description: 经典横版射击游戏,玩家扮演特种部队队员,突破重重防线。 assets.box_front: media/fc/box_front/魂斗罗.png assets.video: media/fc/video/魂斗罗.mp4

如果实验后前端不显示该条目,可以退回方案 B,或者把file字段改为:

file: roms/fc/empty/魂斗罗.nes

并确保roms/fc/empty/目录中存在一个 0 字节的占位文件。这样既保留条目,又不会真正运行游戏。

3.4 方案对比表格

方案操作难度ROM 空间游戏条目显示启动游戏误删风险
A 直接删除 ROM不占用可能不显示失败
B 占位文件法不占用正常显示失败
C 重写 metadata不占用取决于版本失败

综合来看,方案 B 是最适合“只看不玩”需求的方案。它既能保留完整的游戏库展示效果,又能在前端浏览时获得最佳体验。如果你希望进一步精简 metadata 内容,也可以在方案 B 的基础上,再对 metadata 做去file的清理实验。

4. 完整实战:把 300G 整合包瘦身成 50G 预览版

下面进入完整实战环节。这里以一个虚拟的整合包目录结构为例,演示如何一步步把几百 GB 的资源库改造成“只看不玩”的预览版。操作过程中会用到 Windows 批处理、Python 脚本,以及 Pegasus 前端的基本验证方法。

4.1 第一步:复制目录与备份

不管采用哪种精简方案,都不建议直接在原始整合包上操作。最理想的做法是先复制一份完整包再处理,但整合包体积巨大,复制几百 GB 很耗时间。更合理的做法是:备份 metadata 目录和 Pegasus 前端配置,然后直接对原包操作。这样即使出错,也能恢复到原始的元数据状态。

备份步骤如下:

mkdir D:\SkyEmu_Backup xcopy D:\SkyEmu\metadata D:\SkyEmu_Backup\metadata /E /I xcopy D:\SkyEmu\Pegasus D:\SkyEmu_Backup\Pegasus /E /I

xcopy会把metadataPegasus目录完整复制到备份目录。后续不管是误删了 metadata,还是对前端配置做了不可逆的修改,都可以从备份目录恢复。需要说明的是,备份这两个目录并不会占用太多空间,因为 metadata 只是文本文件,Pegasus 目录中也主要是程序文件和主题资源。

如果你想换一种更省心的方式,也可以使用文件版本管理工具,比如 Git,对 metadata 目录做版本追踪。这样每次修改前先提交一次,之后随时可以回滚。

4.2 第二步:清理 roms 目录中的大文件

备份完成后,开始清理 ROM 文件。这里采用方案 B 的“占位文件法”,既保留游戏条目的完整性,又释放磁盘空间。

首先在整合包根目录下打开命令提示符或 PowerShell,先定位到roms目录,确认里面的文件扩展名分布:

dir /s /b D:\SkyEmu\roms | findstr /i "\.nes$ \.sfc$ \.md$ \.bin$ \.iso$ \.zip$ \.7z$"

也可以直接查看目录大小:

powershell -Command "Get-ChildItem -Path 'D:\SkyEmu\roms' -Recurse | Measure-Object -Property Length -Sum | Select-Object @{Name='SizeGB';Expression={[math]::Round($_.Sum / 1GB, 2)}}"

下一步是把所有大于 10MB 的 ROM 文件替换为 0 字节占位文件。使用前面的批处理脚本即可:

@echo off setlocal enabledelayedexpansion set "ROM_DIR=D:\SkyEmu\roms" if not exist "%ROM_DIR%" ( echo roms directory not found. goto :eof ) for /r "%ROM_DIR%" %%F in (*.nes *.sfc *.md *.bin *.iso *.zip *.7z) do ( if %%~zF GTR 10485760 ( del "%%F" type nul > "%%F" echo replaced: %%F ) ) echo done. endlocal

脚本执行后,磁盘空间会迅速释放。注意type nul > "%%F"会创建一个 0 字节的新文件,并且保留原文件名,所以 metadata 中的路径仍然有效。如果你希望彻底不留任何文件,可以把这一句改成del "%%F",但必须接受“游戏条目可能不显示”的风险。

4.3 第三步:保留 media 目录中的封面、简介、视频

roms 清理完成后,下一步是确认media目录是完整的。这一步不需要做太多操作,但要检查 metadata 中引用的媒体文件是否存在。

你可以在整合包根目录运行一个简单的 PowerShell 命令,统计media目录下的文件总大小:

powershell -Command "Get-ChildItem -Path 'D:\SkyEmu\media' -Recurse | Measure-Object -Property Length -Sum | Select-Object @{Name='SizeGB';Expression={[math]::Round($_.Sum / 1GB, 2)}}"

正常情况下,这个大小就是你精简后的主体体积。如果media目录包含大量视频文件,那么 50G 的规模是比较合理的。如果发现media目录意外缺少某个平台的封面或视频,后续需要补充或修改 metadata 路径,否则对应平台的游戏条目会显示空封面。

如果目录结构支持,你还可以清理media目录中的备份文件、缩略图缓存和多余的主题资源,进一步缩小体积。不过要谨慎,尽量不要删除media中任何被 metadata 引用的文件。

4.4 第四步:处理 metadata 中的 file 路径

方案 B 不需要修改 metadata,因为占位文件保留了原文件名。但如果你的整合包在清理后出现游戏条目不显示的问题,可以尝试打开对应的 metadata.pegasus.txt,检查file字段是否指向了不存在的路径。

示例检查方式:打开metadata\fc.pegasus.txt,看到类似以下内容:

file: roms/fc/魂斗罗.nes

然后确认D:\SkyEmu\roms\fc\魂斗罗.nes是否存在。如果存在且是 0 字节文件,说明占位文件生效,前端可以正常展示条目。如果文件不存在,说明脚本没有覆盖到这类文件,需要补充扩展名,或直接创建空目录和空文件。

mkdir D:\SkyEmu\roms\fc\empty 2>nul type nul > "D:\SkyEmu\roms\fc\empty\魂斗罗.nes"

对于少量缺失文件,手工补一下很快。如果缺失数量很多,就需要写一个批量工具来检查和修复,下一章会给出 Python 脚本。

4.5 第五步:启动 Pegasus 验证效果

完成前四步后,启动 Pegasus 前端,检查是否能顺利进入浏览界面。正常情况应该是:封面墙或游戏列表能显示出完整的游戏条目,每个条目都有封面图和文字简介,点击游戏后能播放预览视频;当你尝试点击“启动”按钮运行时,前端要么提示找不到模拟器核心,要么提示 ROM 文件错误,最终无法进入游戏。

验证步骤可以这样安排:

  1. 双击Pegasus\Pegasus.exe启动前端。
  2. 进入各个平台合集,确认游戏条目仍然存在。
  3. 随机点开几个游戏,查看封面图、简介、视频是否正常显示。
  4. 点击“启动”或“Play”按钮,确认游戏不会意外运行。
  5. 查看磁盘空间,确认整合包已经从几百 GB 缩减到约 50G。

如果前端在扫描阶段就卡住或一直转圈,可能是 metadata 中引用的 ROM 路径不存在,且占位文件没有生效。此时回到第四步,检查缺失文件即可。

5. 批量脚本:用 Python 自动完成瘦身与校验

如果整合包中游戏数量非常多,手工检查和修改 metadata 会很痛苦。下面提供两个 Python 脚本,分别用于“批量替换 ROM 为占位文件”和“校验媒体资源完整性”。脚本思路通用,你可以根据实际目录结构调整。

5.1 清理脚本设计思路

脚本需要解决三个问题:一是准确读出 metadata 中引用的文件路径;二是根据路径执行删除和占位操作;三是避开 BIOS、存档等不应该被清空的小文件。实现时使用 Python 标准库即可,不需要额外安装第三方依赖。

脚本流程如下:

  1. 遍历metadata目录下的所有.pegasus.txt文件。
  2. 用正则表达式匹配file:开头的行,提取 ROM 相对路径。
  3. 将相对路径拼接成绝对路径。
  4. 判断文件是否存在、是否大于预设阈值。
  5. 满足条件时删除原始文件并创建 0 字节占位文件。
  6. 最后打印处理统计信息。

为了避免误删 BIOS 文件,脚本可以排除路径中包含biossystemsave等关键词的文件。你可以在脚本开头维护一个排除关键词列表。

5.2 Python 脚本:删除 ROM 并生成占位文件

import re import os from pathlib import Path BASE_DIR = Path(r"D:\SkyEmu") METADATA_DIR = BASE_DIR / "metadata" ROM_FILE_THRESHOLD = 10 * 1024 * 1024 # 10MB # 需要排除的目录关键词 EXCLUDE_KEYWORDS = ("bios", "system", "saves", "save", "cheats") file_pattern = re.compile(r"^file:\s*(.+)$", re.IGNORECASE) def should_exclude(path: Path) -> bool: lower_parts = [part.lower() for part in path.parts] return any(kw in " ".join(lower_parts) for kw in EXCLUDE_KEYWORDS) def trim_rom(rom_path: Path): if should_exclude(rom_path): print(f"skip excluded: {rom_path}") return if not rom_path.exists(): print(f"not exists: {rom_path}") return if rom_path.stat().st_size <= ROM_FILE_THRESHOLD: print(f"skip small file: {rom_path}") return try: rom_path.unlink() rom_path.touch() print(f"replaced: {rom_path}") except OSError as exc: print(f"error: {rom_path}: {exc}") if __name__ == "__main__": for meta_file in METADATA_DIR.glob("*.pegasus.txt"): print(f"parsing: {meta_file.name}") for line in meta_file.read_text(encoding="utf-8", errors="ignore").splitlines(): m = file_pattern.match(line.strip()) if m: rel = m.group(1).strip() # 跳过外部路径或绝对路径 if ":" in rel or rel.startswith("/"): continue rom_path = (BASE_DIR / rel).resolve() trim_rom(rom_path)

这段脚本执行后,会把所有被 metadata 引用的大体积 ROM 替换成 0 字节占位文件。路径中的中文、空格都能正常处理。如果你使用的整合包目录结构不是BASE_DIR / file这种基准路径关系,需要根据实际情况调整拼接逻辑。

5.3 Python 脚本:检查 metadata 资源完整性

清理 ROM 之后,还需要确保封面和视频资源没有丢失。下面的脚本会遍历 metadata 中的assets字段,并检查对应媒体文件是否存在。如果存在缺失,脚本会输出缺失清单,方便后续补充。

import re from pathlib import Path BASE_DIR = Path(r"D:\SkyEmu") METADATA_DIR = BASE_DIR / "metadata" asset_pattern = re.compile(r"^assets\.\w+:\s*(.+)$", re.IGNORECASE) missing_assets = [] total_checks = 0 if __name__ == "__main__": for meta_file in METADATA_DIR.glob("*.pegasus.txt"): for line in meta_file.read_text(encoding="utf-8", errors="ignore").splitlines(): m = asset_pattern.match(line.strip()) if not m: continue rel = m.group(1).strip() if ":" in rel or rel.startswith("/"): continue asset_path = BASE_DIR / rel total_checks += 1 if not asset_path.exists(): missing_assets.append((meta_file.name, rel)) print(f"total asset references: {total_checks}") print(f"missing asset count: {len(missing_assets)}") for meta_name, rel in missing_assets[:50]: print(f" {meta_name}: {rel}")

这个脚本只做检查和报告,不会删除任何文件,可以放心运行。如果你发现大量缺失,很可能是 metadata 中使用了与当前整合包不同的资源目录命名规则,需要对比原包后做批量替换。

5.4 运行结果示例

假设脚本运行后的输出如下:

parsing: fc.pegasus.txt replaced: D:\SkyEmu\roms\fc\魂斗罗.nes replaced: D:\SkyEmu\roms\fc\超级玛丽.nes parsing: md.pegasus.txt replaced: D:\SkyEmu\roms\md\幽游白书.md ... total asset references: 8320 missing asset count: 2 fc.pegasus.txt: media/fc/box_front/冒险岛.png md.pegasus.txt: media/md/video/太空战士.mp4

对于缺失的 2 个媒体文件,你可以判断是因为原整合包本身缺失,还是因为文件名大小写、编码问题导致的路径不一致。如果是原包缺失,可以忽略;如果是编码问题,需要把 metadata 和实际文件名统一成同一种编码规范。

6. 常见问题与排查思路

在实际操作中,你会遇到各种奇怪的现象。下面整理几个高频问题,包含原因分析和解决思路。

问题现象常见原因解决思路
清理后游戏条目直接消失Pegasus 扫描时判断 file 文件不存在,跳过条目使用 0 字节占位文件法,确保 file 指向存在
封面图能显示,视频无法播放视频文件缺失,或 metadata 中 video 路径不对检查 assets.video 对应的文件是否存在,核对大小写
整个前端启动后一直转圈metadata 中引用了大量不存在的路径,扫描缓慢用 Python 脚本校验 metadata,修复或删减缺失条目
体积没有明显变小还有未引用的 ROM 或冗余 BIOS、缓存文件用磁盘扫描工具找出大文件,确认是否被 metadata 引用
删除文件后磁盘空间没有释放文件被放入回收站,或仍有进程占用清空回收站,关闭 Pegasus 和 RetroArch 进程
点击启动后模拟器报错0 字节占位文件无法被模拟器识别这是“只看不玩”的预期行为,不影响浏览

如果是“启动后模拟器报错”的情况,其实不需要处理,因为那就代表你已经成功把一个完整整合包改成了“只看不玩”的预览版。如果你希望保留少量可玩的游戏,可以在清理前先把这几个游戏手动复制到另一个目录,并在 metadata 中把它们的file路径指向新目录。

还有一类问题是脚本误删造成的。例如有人直接删除整个roms目录,结果连 RetroArch 需要的 BIOS 文件也一并删了。这类问题最好预防,而不是事后修复。建议在清理前先用脚本输出“将被替换文件清单”,人工确认清单里没有 BIOS、存档、金手指等关键文件后,再执行清理。

# 输出待处理文件的预览清单 import re from pathlib import Path BASE_DIR = Path(r"D:\SkyEmu") METADATA_DIR = BASE_DIR / "metadata" file_pattern = re.compile(r"^file:\s*(.+)$", re.IGNORECASE) for meta_file in METADATA_DIR.glob("*.pegasus.txt"): for line in meta_file.read_text(encoding="utf-8", errors="ignore").splitlines(): m = file_pattern.match(line.strip()) if m: rel = m.group(1).strip() if ":" in rel or rel.startswith("/"): continue p = BASE_DIR / rel if p.exists() and p.stat().st_size > 10 * 1024 * 1024: print(p)

如果你把这段脚本的输出保存成to_trim.txt,再人工扫一眼,就能大幅降低误删风险。

7. 工程实践与法律提醒

把整合包瘦身成“只看不玩”的过程,看起来只是删文件,但如果想做得稳定、可维护,还是有一些工程层面的经验可以总结。

7.1 保留可玩性的优雅做法:目录 junction / 符号链接

有些用户只是暂时想省空间,但未来可能又想玩某个游戏。针对这种情况,不建议直接删除 ROM,而是把 ROM 移动到另一块硬盘或移动硬盘,然后在原整合包位置创建目录链接。

Windows 下可以用mklink /J创建目录链接:

mklink /J D:\SkyEmu\roms E:\SkyEmu_ROMs\roms

这样做的效果是:天马前端看到的roms目录仍然存在,所有 metadata 路径都不用修改;平时如果不挂载移动硬盘,前端里的游戏条目因为找不到文件而无法启动,浏览功能不受影响;需要玩游戏时,插上移动硬盘,就可以继续完整体验。

这种方式适合“偶尔玩一下”的用户,避免了做两个整合包的麻烦。如果你只是追求纯粹的“只看不玩”,直接使用占位文件法更省心。

7.2 如何维护“只看不玩”库的长期一致性

整合包在长时间使用后,可能会出现媒体文件缺失、metadata 路径错误等问题。为了保持一致性,建议你建立一套简单的维护流程:

  1. 每次新增或删除游戏时,都同步检查 metadata 中的fileassets是否仍然有效。
  2. 使用脚本定期校验媒体资源,把缺失清单输出成日志。
  3. 对 metadata 目录做版本控制,可以用 Git 或普通备份目录,确保改坏了能回滚。
  4. 如果整合包需要分享给其他人,建议附带一份“体积精简说明”,解释为什么没有本体 ROM。

这些习惯可以显著降低后期维护成本,尤其当游戏数量达到几千个时,手工检查几乎不现实,必须依赖脚本。

7.3 版权与合规边界

最后必须认真强调版权问题。天马整合包中的前端程序、主题资源、模拟器核心通常遵循各自的开放许可,但游戏 ROM、部分 BIOS、游戏封面和视频素材不一定允许随意传播。本文讨论的“删 ROM、留媒体”本质上是对已有整合包做文件整理,你不能因为做了精简,就认为自己拥有了这些内容的分发权。

在实际使用中,建议始终遵循几个原则:第一,只处理你拥有合法备份、或已经获得授权的内容;第二,不要公开分享整合包中的 ROM 或未经授权的媒体文件;第三,如果整合包作者明确声明了使用限制,请遵守作者的规定。技术本身没有善恶,但使用方式需要自己负责。

8. 总结与下一步扩展

到这里,一个“只看不玩”的天马精简版就改造完成了。你掌握了天马整合包的目录结构、metadata.pegasus.txt 的基础语法、ROM 与媒体资源的绑定关系,也学会了用批处理和 Python 脚本批量删除 ROM、生成占位文件、校验媒体资源完整性。如果你的目标是只浏览封面、简介和预览视频,那么这套方案可以帮你把整合包体积从几百 GB 压缩到 50G 左右。

下一步可以继续研究几个方向:一是学习 Pegasus 前端的主题配置,把精简包界面进一步美化,做成类似数字博物馆的展示墙;二是研究 RetroArch 核心和 BIOS 的配置逻辑,理解“可玩版”和“只看不玩版”之间的差异,这样未来需要恢复某几个游戏的游玩功能时更加得心应手;三是尝试为精简包设计一套自用的数据校验脚本,把 metadata 和媒体文件的完整性检查自动化。

实际操作时,请一定先备份 metadata 和前端配置,再执行任何删除操作。如果你在精简过程中遇到游戏条目不显示、视频无法播放、体积压缩不明显等问题,优先回到 metadata 和占位文件这两条主线上排查。希望这篇教程能帮你省下几百 GB 的硬盘空间,同时还能保留一个漂亮又好用的怀旧游戏资料库。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询