
马库斯影院
这既是《骑马与砍杀》的内置视频播放器(支持字幕文件),也是一个预功能模组,可作为其他模组作者的游戏中CG触发播放器
查看大图[center]
[color=#8B6F47]████████████████████████████████████████[/color]
[size=6][b][color=#D7B56D]MARCUS CINEMA[/color][/b][/size]
[color=#A9C5D3]马 库 斯 影 院[/color]
[color=#8B6F47]████████████████████████████████████████[/color]
[color=#E6E6E6]将 MP4 / MOV 视频放入 Videos 文件夹,在任意城镇支付 1000 第纳尔,
即可在游戏内全屏按顺序观看,循环播放直至你离开。[/color]
[color=#B8B2A7]自动转码 · 循环播放列表 · 游戏内播放 · 支持 Bannerlord v1.3.15 / v1.4.8[/color]
[/center]
[quote]
[center][size=4][b][color=#6EC5D9]◆ 模组概览 ◆[/color][/b][/size][/center]
[b]作者:[/b]MarcusVebius
[b]模组版本:[/b]v1.1.1
[b]游戏版本:[/b]Mount & Blade II: Bannerlord v1.3.15 / v1.4.8
[b]模式:[/b]单人战役
[b]入场费:[/b]1000 第纳尔
[b]默认按键:[/b]Esc - 下一个 | Backspace - 视频列表 | L - 循环模式 | , - 上一个
[b]语言:[/b]英语 / 简体中文,根据游戏语言自动选择[/quote]
[center][color=#8E6C88]████████████ 核心功能 ████████████[/color][/center]
[list]
[][b][color=#D7B56D]城镇菜单入口[/color][/b]
进入城镇或城堡后,从菜单打开“Marcus Cinema”。需要支付 1000 第纳尔入场费;当资金不足时按钮为灰色。
[/]
[][b][color=#D7B56D]视频选择列表[/color][/b]
影院打开后会显示一个原生风格的播放列表;选择一个视频开始播放。随时按 Backspace 返回列表并切换其他视频。
[/]
[][b][color=#D7B56D]常见视频格式[/color][/b]
将 MP4 / MOV / MKV / AVI / WebM / WMV / M4V / FLV / TS 文件放入 [b]MarcusCinema/Videos[/b]。模组会在首次播放时使用内置的 ffmpeg 自动转换,之后直接播放。
[/]
[][b][color=#D7B56D]直接播放[/color][/b]
现成的 [b].ivf + .ogg[/b] 配对文件(引擎原生格式)无需转换即可立即播放。
[/]
[][b][color=#D7B56D]三种循环模式[/color][/b]
默认为 [b]单个循环[/b](所选视频无限重复播放)。按 [b]L[/b] 可在 [b]列表循环[/b](自动前进,循环回绕)和 [b]播放后停止[/b](播放完毕后返回列表)之间切换。当前模式会显示在屏幕上。
[/]
[][b][color=#D7B56D]保持宽高比播放[/color][/b]
视频按原始比例缩放以适应屏幕并居中,留黑边而不拉伸——竖屏片段(例如 9:16 的 AI 短视频)也可正常播放。
[/]
[][b][color=#D7B56D]字幕支持[/color][/b]
将与视频同名的 [b].srt[/b] 文件放在视频旁边(例如 [b]MyMovie.zh-HANS.srt[/b]、[b]MyMovie.en-GB.srt[/b])。它们会使用官方战役开场白的命名方式复制到转码缓存中,原生播放器会加载与游戏语言匹配的字幕。
[/]
[][b][color=#D7B56D]在线视频[/color][/b]
添加 [b]Videos/playlist.txt[/b],每行一个直接媒体链接([b]标签|URL[/b] 或纯 URL,[b]#[/b] 表示注释),即可像本地片段一样播放在线视频。ffmpeg 会下载并转码到缓存中,因此重复播放可立即开始。仅支持直链——不支持 DRM/登录,不支持直播流。
[/]
[][b][color=#D7B56D]在线代理[/color][/b]
当需要使用代理时,模组会依次读取 [b]MARCUS_CINEMA_HTTP_PROXY[/b]、[b]http_proxy[/b]/[b]HTTPS_PROXY[/b],然后读取系统 WinINET 代理(注册表),并自动将其传递给 ffmpeg。注意:仅支持 WinINET 的本地代理工具可能会拒绝 ffmpeg 等原始套接字客户端;这种情况下请将视频下载到本地。
[/]
[][b][color=#D7B56D]支持 AI 生成视频[/color][/b]
提供了一次性播放 API [b]PlayMediaFile(path)[/b] 和 [b]PlayMediaUrl(url)[/b],适用于短 AI 生成片段(云端模型 / ComfyUI,通常 <= 20 秒;转码需要几秒钟)。片段播放一次后,游戏会返回调用方的先前状态;可挂钩 [b]SessionEnded[/b] 以获取回调。
[/]
[][b][color=#D7B56D]后台转码 + 缓存[/color][/b]
转换在后台运行,不会冻结游戏。结果缓存在 [b]Videos/.cache[/b] 中,只要源文件未更改即可复用。完成的转换会带有完整性标记,因此中断/失败/崩溃的转码绝不会被复用,并会在下次自动重新运行。
[/]
[][b][color=#D7B56D]跳过与退出[/color][/b]
[b]Esc[/b] 播放下一个视频(转码期间也可用),[b],[/b] 播放上一个,[b]Backspace[/b] 返回列表,[b]L[/b] 切换循环模式。[/]
[/list]
[center][color=#8E6C88]████████████ 安装与使用 ████████████[/color][/center]
[list=1]
[]将 [b]MarcusCinema[/b] 文件夹放入 [b]Modules/[/b],然后在启动器中启用该模组。[/]
[]将视频文件放入 [b]Modules/MarcusCinema/Videos/[/b](没有视频时菜单按钮不会出现)。[/]
[]进入任意城镇或城堡并打开“Marcus Cinema”(入场费 1000 第纳尔)。[/]
[]从列表中选择一个视频。首次播放会转换文件(出现“Transcoding: filename...”消息),随后视频会自动全屏开始播放。
[i]每次进入影院时都会重新扫描列表,因此添加或移除文件会立即生效——无需重启。[/i][/]
[/list]
[quote][b]关于 ffmpeg:[/b]转换依赖 [b]MarcusCinema/ffmpeg/ffmpeg.exe[/b](GPL/LGPL 开源软件)。
发布包中应包含它。搜索顺序:内置文件夹 -> 环境变量 [b]MARCUS_CINEMA_FFMPEG[/b] -> PATH。
下载:https://www.gyan.dev/ffmpeg/builds/ (Windows x64 静态版,ffmpeg-release-essentials.zip)。[/quote]
[center][color=#8E6C88]████████████ 操作 ████████████[/color][/center]
[list]
[][b]Esc[/b] - 跳过当前视频并播放下一个[/]
[][b],[/b] - 上一个视频[/]
[][b]Backspace[/b] - 返回视频列表[/]
[][b]L[/b] - 切换循环模式:单个 / 列表 / 停止[/]
[/list]
[center][color=#8E6C88]████████████ 字幕文件 ████████████[/color][/center]
[code]Videos/
|-- MyMovie.mp4
|-- MyMovie.zh-HANS.srt ; 简体中文字幕
`-- MyMovie.en-GB.srt ; 英文字幕[/code]
同名的 [b].srt[/b] 文件会按官方命名方式复制到缓存中;原生播放器会加载与游戏语言匹配的字幕(与官方战役开场白机制相同)。如果文件无法正常渲染,请使用 UTF-8 编码。
[center][color=#8E6C88]████████████ 开发者 API ████████████[/color][/center]
其他模组和未来功能可以使用公开 API(程序集 [b]MarcusCinema.dll[/b],命名空间 [b]MarcusCinema[/b]):
[list]
[][b]CinemaService.Transcoder[/b]([b]IVideoTranscoder[/b])- ffmpeg 解析、格式检查、缓存查询、转码任务、缓存清理。[/]
[][b]CinemaService.PlaylistProvider[/b]([b]ICinemaPlaylistProvider[/b])- 将任意文件夹扫描为播放列表([b]GetPlaylist(string dir)[/b])。[/]
[][b]CinemaService.Player[/b]([b]ICinemaPlayer[/b])- [b]StartSession(playlist, startIndex)[/b]、[b]StopSession()[/b],以及 [b]SessionStarted[/b] / [b]SessionEnded[/b] 事件。[/]
[][b]CinemaEntryPoint[/b] - [b]CanEnter()[/b](金币 >= 1000 且播放列表非空)、[b]TryEnterCinema()[/b](扣费 + 进入列表)、[b]TryStartVideo(index)[/b]。[/]
[][b]CinemaEntryPoint.PlayMediaFile(path, name?)[/b] / [b]PlayMediaUrl(url, name?)[/b] - 一次性播放任意本地文件或直接 URL,播放一次后返回调用方状态。非常适合集成云端 AI 模型生成的短片段。[/]
[][b]IVideoTranscoder.TryTranscodeSync(source, out video, out audio, out error)[/b] - 阻塞式便捷转码(本地文件或 URL;缓存命中时立即返回),适用于不想轮询任务的调用方。[/]
[][b]LocalizedText.Get(id, fallback)[/b] - 统一本地化辅助方法;新增字符串时请保持两个语言 XML 同步。[/]
[][b]MarcusCinemaState[/b] / [b]MarcusCinemaScreen[/b] - 通过 [b][GameStateScreen][/b] 注册的全屏播放状态和屏幕,可直接复用或扩展。[/]
[/list]
[center][color=#8E6C88]████████████ AI 片段播放示例 ████████████[/color][/center]
[code]// 云端模型 / ComfyUI 生成的本地文件:
MarcusCinema.CinemaEntryPoint.PlayMediaFile(@"D:\generated\clip_01.mp4", "我的 AI 片段");
// 或者云服务返回的直接下载链接:
MarcusCinema.CinemaEntryPoint.PlayMediaUrl("https://example.com/generated/clip_01.mp4", "我的 AI 片段");
// 片段播放结束后的回调(且游戏已返回调用方状态):
MarcusCinema.CinemaService.Player.SessionEnded += () => { /* 继续你的流程 / };[/code]
[center][color=#8E6C88]████████████ 常见问题 ████████████[/color][/center]
[list]
[][b]“找不到 ffmpeg”:[/b]将 ffmpeg.exe 放入 [b]MarcusCinema/ffmpeg/[/b] 并重启游戏。[/]
[][b]新视频未出现在列表中:[/b]确保文件位于 [b]Videos/[/b] 顶层(不会扫描子文件夹)且扩展名受支持;重新进入影院即可重新扫描。[/]
[][b]在线条目无法播放:[/b]仅支持无 DRM/登录的直接 HTTP(S) 链接;不支持直播流。可下载文件到本地作为备选方案。[/]
[][b]在线内容已更改但缓存仍是旧的:[/b]在线缓存以 URL 为键;删除 [b]Videos/.cache[/b] 或调用 [b]ClearCache(url)[/b] 后重新播放。[/]
[][b]在线条目持续失败:[/b]确保机器能直接访问该 URL,或配置了可用的代理(参见“在线代理”);如果系统代理仅支持 WinINET,请将文件下载到本地。[/]
[][b]转码失败:[/b]文件可能已损坏或使用了不支持的编解码器;请检查游戏日志中的 [b][MarcusCinema][/b] 错误行。[/]
[][b]没有声音:[/b]无音轨的视频按设计静音播放;对于有音轨的文件,建议使用 H.264/AAC 源以获得有声播放。[/]
[][b]播放速度不正确:[/b]转换会规范化为 30 fps(引擎标准);引擎视频路径不进行帧率转换。[/]
[][b]没有村庄入口:[/b]该选项仅添加到城镇和城堡菜单。[/]
[][b]子文件夹:[/b]仅扫描 Videos 的顶层。[/]
[/list]
[center][color=#8E6C88]████████████ 已知限制 ████████████[/color][/center]
[list]
[]视频在游戏窗口内全屏渲染(使用游戏自身的视频管线);不使用外部播放器。[/]
[]转码时间随时长和比特率增加;缓存后即可立即播放。[/]
[]引擎仅解码 VP8 (IVF) + Vorbis (OGG);其他格式均需先转码。[/]
[]引擎的视频管线没有暂停、进度条、音量或速度控制;循环和跳过通过按键控制。[/*]
[/list]
还没有人评论,去客户端里说两句吧。
评论在新手盒子客户端中发表,这里同步展示。