3DMGAME 3DM首页 新闻中心 前瞻 | 评测 游戏库 热门 | 最新 攻略中心 攻略 | 秘籍 下载中心 游戏 | 汉化 购买正版 论坛

注册 登录

QQ登录

只需一步,快速开始

查看: 126|回复: 6
打印 上一主题 下一主题

[MOD] 供MOD开发者使用的简易资源库,支持通过redscript或lua在屏幕上播放带声音的视频(2026-06-10更新)

[复制链接]

4573

主题

1万

帖子

12万

积分

创意工坊

Rank: 11Rank: 11Rank: 11Rank: 11

贡献度
22187
金元
406180
积分
129366
精华
0
注册时间
2017-8-17
跳转到指定楼层
主题
发表于 2026-6-5 15:41 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 鼓掌之间 于 2026-6-10 11:02 编辑

转自:https://www.nexusmods.com/cyberpunk2077/mods/29999

运行需求
- Audioware:https://bbs.3dmgame.com/thread-6623400-1-1.html
  可选 - 若已安装则会播放声音

- Codeware:https://bbs.3dmgame.com/thread-6550997-1-1.html

- RED4ext:https://bbs.3dmgame.com/thread-6554657-1-1.html

- redscript:https://bbs.3dmgame.com/thread-6555794-1-1.html

介绍
供MOD开发者使用的简易资源库,支持通过redscript或lua在屏幕上播放视频。一行代码即可实现!

本框架预定义了1000个bink2视频资源(键位),你可以在自己的MOD中覆盖这些资源,然后在需要时通过lua或redscript在屏幕上播放。你只需要准备好视频文件,无需关心额外的代码逻辑。

所有方法均定义在玩家对象上,因此可以从任何上下文调用,支持lua和redscript两种语言。

安装
使用MOD管理器安装,或解压到游戏目录。

使用方法
将你的bink2视频文件放在MOD内的以下路径中。为避免与其他MOD开发者冲突,请从0-1000中选择属于你自己的路径键位。例如,不要选择0-5这类其他开发者可能也会用的靠前路径,选择一个对你的MOD来说唯一的安全区间(如50-55)。

重要提示! 请查看评论区置顶帖的已用键位注册表,避免使用已被占用的键位。

base\VideoFramework\movies\0.bk2
base\VideoFramework\movies\1.bk2
base\VideoFramework\movies\2.bk2
base\VideoFramework\movies\3.bk2
base\VideoFramework\movies\4.bk2
base\VideoFramework\movies\5.bk2
base\VideoFramework\movies\6.bk2
base\VideoFramework\movies\7.bk2
base\VideoFramework\movies\8.bk2
base\VideoFramework\movies\9.bk2
base\VideoFramework\movies\10.bk2
...
...
base\VideoFramework\movies\1000.bk2


通过玩家对象调用以下方法。完整API请见页面底部的文档部分。

public func PlayVideo(label: String, movie: Int32, w: Float, h: Float, delay: Float)
public func PlayFullScreenVideo(label: String, movie: Int32, delay: Float)
public func PlayVideoWithSound(label: String, movie: Int32, w: Float, h: Float, sound: String, delay: Float)
public func PlayFullScreenVideoWithSound (label: String, movie: Int32, sound: String, delay: Float)
public func StopVideo()
public func RemoveVideo(label: String)


- delay:延迟秒数。使用0.0立即播放,否则将在延迟时间后开始播放
- movie:要播放的视频索引,对应资源键位(见下文)
- sound:Audioware音效片段标签
- label:特定视频的唯一标签,例如"movie0"。用于在需要时调用RemoveVideo
- w:宽度
- h:高度

注意: 视频默认锚定在屏幕左上角(未来更新将支持不同锚点)。

示例
LUA

Game.GetPlayer()layFullScreenVideo("video1",1,0.0)


REDSCRIPT

let player: ref<layerPuppet> = GetPlayer(GetGameInstance());
player.PlayFullScreenVideo("video1",1,0.0)


服务调用

let system: ref<VideoFramework> = GameInstance.GetScriptableSystemsContainer(this.GetGame()).Get(n"VideoFramework.System.VideoFramework") as VideoFramework;

// 方法签名如下。如果fullscreen为true,则size参数会被忽略
system.PlayVideo(delay: Float, label: CName, size: Vector2, movie: Int32, fullscreen: Bool, player: ref<layerPuppet>)


创建BINK视频
要创建bink视频,你需要从这里下载Rad Tools。

另外,我需要做一个特殊操作才能让视频正常工作:在Bink中将格式设置为Bink 1,然后在文件生成后,将文件后缀从.bik改为.bk2。这可能是因为红引擎内部的驱动是旧版bink。

第一步(如果你是视频制作新手)是创建(或使用现有).mp4或.mov视频文件。我使用OpenShot视频编辑器,Adobe Premiere或After Effects等其他工具也可以。准备好视频文件后,使用上面提到的Bink应用将其转换为.bk2格式即可。

创建带透明通道的视频
这是一个多步骤过程,具体步骤如下:
1. 为你的前景物体视频添加绿色背景(可以使用OpenShot等视频编辑器)。或者使用AI(如Seedance 2.0或Veo)生成视频,并提示它将背景设置为纯绿色。你也可以上传现有视频,让AI将背景替换为纯绿色。
2. 打开Adobe After Effects,将视频添加到时间轴。然后在效果选项卡中搜索"KeyLight",将其拖放到时间轴上的视频上。在该效果的属性中,你会看到一个吸管工具和一个颜色样本(可能是黑色)。点击吸管工具,然后点击视频预览中的绿色背景。
3. 将视频添加到渲染队列,将渲染属性的输出格式设置为"Quicktime"(你可能需要在电脑上安装Apple Quicktime)。然后在该对话框的下拉菜单中,选择"RGB+Alpha"作为输出格式类型,点击渲染。
4. 打开RAD Tools(用于创建bink视频),选择你新生成的.mov Quicktime文件。确保勾选"Use Alpha Plane"复选框(见上图对话框)。将输出格式设置为"BINK 1",但将输出文件名后缀改为.bk2。我不确定为什么需要这一步,但确实是必须的。然后生成你的bink文件即可。

播放带音频的视频
本框架不会播放视频内置的声音。相反,你需要将声音添加到MOD的Audioware配置中,然后调用带声音的视频方法(见下文)并传入Audioware片段标签。具体细节请参考Audioware文档。

文档
简易视频框架API文档
本MOD提供了一套简洁的API,用于在玩家的HUD上播放预渲染的.bk2视频。API通过注入到PlayerPuppet类的方法暴露,方便使用。

PlayerPuppet扩展方法
你可以直接在任何PlayerPuppet实例(例如本地玩家)上调用这些方法。

PlayFullScreenVideo(label: String, movie: Int32, delay: Float) -> Void
播放一个缩放至填满整个屏幕的视频。
- label:视频画布的唯一字符串标识符。如果已存在同名标签的画布,会先移除再创建新的
- movie:要播放的视频索引(有效范围:0到1000),直接对应文件base\VideoFramework\movies\{index}.bk2
- delay:视频开始播放前的等待时间(秒),使用0.0立即播放

PlayVideo(label: String, movie: Int32, w: Float, h: Float, delay: Float) -> Void
播放指定宽高的视频,锚定在屏幕左上角。
- label:视频画布的唯一字符串标识符
- movie:要播放的视频索引(0到1000)
- w:视频画布的宽度(像素)
- h:视频画布的高度(像素)
- delay:视频开始播放前的等待时间(秒)

PlayFullScreenVideoWithSound(label: String, movie: Int32, sound: String, delay: Float) -> Void
播放全屏视频,同时播放一个音频系统事件。
- label:视频画布的唯一字符串标识符
- movie:要播放的视频索引(0到1000)
- sound:要播放的音频事件的字符串名称
- delay:视频开始播放前的等待时间(秒)

PlayVideoWithSound(label: String, movie: Int32, w: Float, h: Float, sound: String, delay: Float) -> Void
播放指定宽高的视频,同时播放一个音频系统事件。
- label:视频画布的唯一字符串标识符
- movie:要播放的视频索引(0到1000)
- w:视频画布的宽度(像素)
- h:视频画布的高度(像素)
- sound:要播放的音频事件的字符串名称
- delay:视频开始播放前的等待时间(秒)

StopVideo() -> Void
停止当前正在播放的视频。

RemoveVideo(label: String) -> Void
从屏幕上完全移除指定标签的视频画布。

视频框架服务类
如需更低级别的访问,你可以直接与视频框架脚本系统交互。

获取实例

let videoFramework = VideoFramework.GetInstance(player);


方法
- PlayVideoOnCanvas(...):将视频直接附加到指定的inkCompoundWidget根节点。如果你希望视频成为自定义UI层的一部分,而不是默认的inkHUDLayer,这个方法非常有用
- PlaySound(label: CName) -> Void:通过扩展音频系统触发一个声音事件
- GetMoviePath(index: Int32) -> ResRef:返回与整数索引对应的.bk2文件的ResRef路径

示例用法

// 立即全屏播放索引为5的视频
player.PlayFullScreenVideo("my_fullscreen_vid", 5, 0.0);

// 延迟2.5秒后以1920x1080分辨率播放索引为10的视频
player.PlayVideo("my_custom_vid", 10, 1920.0, 1080.0, 2.5);

// 延迟2.5秒后以1920x1080分辨率播放索引为10的视频并播放声音
player.PlayVideoWithSound("my_custom_vid", 10, 1920.0, 1080.0, "SoundEvent", 2.5);

// 立即全屏播放索引为2的视频并播放自定义音频
player.PlayFullScreenVideoWithSound("my_sound_vid", 2, "my_custom_audio_event", 0.0);

// 停止当前播放的视频
player.StopVideo();

// 从屏幕上移除视频画布
player:RemoveVideo("my_custom_vid");

下载地址:

游客,如果您要查看本帖隐藏内容请回复


评分

1

查看全部评分

回复

使用道具 举报

0

主题

20

帖子

34

积分

初级玩家

Rank: 2

贡献度
0
金元
340
积分
34
精华
0
注册时间
2025-8-22
舒服的沙发
发表于 2026-6-5 18:13 | 只看该作者
666666666666666666666666666666
回复 支持 反对

使用道具 举报

2

主题

686

帖子

820

积分

超级玩家

Rank: 5Rank: 5

贡献度
0
金元
8200
积分
820
精华
0
注册时间
2018-2-3
硬硬的板凳
发表于 2026-6-5 23:24 | 只看该作者
神鼎飞丹砂防守打法
回复 支持 反对

使用道具 举报

0

主题

343

帖子

426

积分

高级玩家

Rank: 4

贡献度
0
金元
4257
积分
426
精华
0
注册时间
2018-10-21
冰凉的地板
发表于 2026-6-6 15:46 | 只看该作者
大佬6666666666666666
回复 支持 反对

使用道具 举报

0

主题

350

帖子

448

积分

高级玩家

Rank: 4

贡献度
0
金元
4482
积分
448
精华
0
注册时间
2019-7-27
5#
发表于 2026-6-7 00:07 | 只看该作者
11111111111111111
回复 支持 反对

使用道具 举报

4573

主题

1万

帖子

12万

积分

创意工坊

Rank: 11Rank: 11Rank: 11Rank: 11

贡献度
22187
金元
406180
积分
129366
精华
0
注册时间
2017-8-17
6#
 楼主| 发表于 2026-6-10 11:02 | 只看该作者
2026-06-10更新
回复 支持 反对

使用道具 举报

0

主题

29

帖子

126

积分

中级玩家

Rank: 3Rank: 3

贡献度
0
金元
1259
积分
126
精华
0
注册时间
2024-6-11
7#
发表于 2026-6-10 21:12 | 只看该作者
6666666666666
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|3DMGAME ( 京ICP备14006952号-1  沪公网安备 31011202006753号

GMT+8, 2026-6-11 14:48 , Processed in 0.037793 second(s), 20 queries , Memcached On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表