English 简体中文
by 洛风澜_Sea(WindWaves_Sea)
本文亦发布于作者Blog和B站专栏此项目的GitHub仓库以及Modrinth
本文亦发布于作者Blog和B站专栏以及此项目的GitHub仓库
本项目基于数据包提供了一个在原版Minecraft中播放序列图片实现伪播放视频效果
数据包主要有以下用途
自动化计算帧率、批量处理帧文件
提供自适应帧率以提升性能 提供接口用于快速配置,播放资源包中的序列图片
也提供了一些变量用于快速添加资源包中的序列图片实现快速播放
此数据包默认使用装备头部来触发装备遮罩,如果不想使用头部装备栏可以自行在dp中更改(目前V2.0需要这样做)
资源包中添加了一个透明模型用于给与装备遮罩物品来达到"伪"无物品给与即可播放的效果
序列图片指将视频或动画的每一帧保存为独立的静态图像文件,并按帧序号顺序排列的一组图片文件。它常用于影视后期、3D 动画、特效制作等领域,因其跨平台兼容性高、画质无损而被广泛采用。
可以前往Modrinth和Github下载此前置包
需要为图片序列(.png格式)
视频最好为20帧的,如果使用60帧的视频需要将tick设置为60
/tick rate 60
设置目标游戏刻速率。
视频配置中frame_rate是原视频帧率,如果视频为60帧可以这样配置
frame_rate:60

可以使用快捷键G或者在游戏菜单打开

视频播放必须使用G键或者使用指令打开 /dialog show @s animations:open_menu

玩家需要选择视频尺寸 1920 x 1080为16:9 2560 x 1080为16:10
如果要使用视频播放页面请先在语言设置中选择语言
查看第一个图片的变化一般为全0,查看最后一个0前面有几个0,将这些0写到frame_zero里,如video0000.png应该将000写如, 如下
{frame_zero:"000"}
帧数 用来控制玩家目前播放的视频帧(图片) 例如{frame:1}
路径
用来指定视频输出的物品文件位置 例如
{video:text_video/}
视频名称 用来匹配帧号前的名称,需要和命令存储名称一致即video:后面的名称注意: 如果使用blender请按照情况填写blender_name 例如 video0000.png 数字前面的video就是名称,因此此处应该这样写
{name:"video"}
名称建议越短越好(因为使用宏,字符越少性能消耗越少)
使用blender输出的图片序列请开启此选项 {blender:"true/false"}
使用blender请留空(不用blender无限填写) 如果帧号前有名称请按照上方视频名称提到的方式填写 {blender_name:""}
帧率
用于自定义帧率, 只支持服务器使用,服务器使用需要设置 function-permission-level=3 如果不是服务器也需要填写视频实际帧率用于自适应帧率,如果服务器需要使用请自行在start/start_macros0开启$tick rate $(frame_rate)将井号删除即可,如果需要还原游戏刻请在stop里写上$tick rate 20
视频声音 需要开启sound_switch才能使用 如果视频有声音需要在此写上sounds.json定义的视频声音播放 参考playsound来写
声音是否启用 输入false/true来控制声音是否开启/视频是否需要播放声音 {sound_switch:"false/true"}
最大帧数 视频的最大帧数
装备槽
设置物品穿戴在哪时启用遮罩此值应为:head,body,chest,feet,legs,mainhand,offhand,saddle其中之一
详情可看equippable:camera_overlay
关于对话框的配置项
非必填项
是否需要在视频列表中显示此视频(true) {video_list_show:true}
视频尺寸设置
视频路径应为 path填写的路径/视频尺寸/图片序列文件 如 video:text_video/16:9/0001.png
是否开启多视频尺寸功能(必须要支持多视频尺寸才能开启) (true/false)
默认尺寸,填写数字代号即size_list的键名 default_size:1
是否支持其中的视频尺寸(true/false) 注意! 1代表的是16:9 2代表的是16:10 3代表的是3:2 4代表的是4:3 请勿随便开启选项
非必填项
在dialog中视频名称显示的语言文字以及对应的翻译
如果使用dialog显示视频必须填写
默认语言,值为以下的键名
1:"en-us",
2:"zh-cn",
3:"zh-hk",
4:"zh-mo",
5:"zh-sg",
6:"zh-tw",
7:"en-au",
8:"en-ca",
9:"en-in",
10:"en-gb",
11:"fr-fr",
12:"de-de",
13:"ja",
14:"kn",
15:"es-es",
16:"ar",
17:"ko",
18:"in-in"
键名后面对应的是支持的语言代码,和下文提到的语言代码相同
语言翻译文本
应该在language列表中填写 按照以下格式: 语言代码:"翻译文本" 例如:en-us:"School"
Function
data merge storage video:school \
{video:\
{\
frame_zero:"000",\
frame:"0",\
path:"animation:school/",\
name:"school",\
blender_name:"",\
frame_rate:"60",\
sound:"",\
sound_switch:false,\
max_frame:740,\
blender:true,\
slot:"head",\
dialog:{\
video_list_show:true\
},\
resolution:{\
switch:false,\
default_size:1,\
size_list:{\
1:true,\
2:false,\
3:false,\
4:false\
}\
},\
language:{\
default_language:"en-us",\
en-us:"School",\
zh-cn:"学校"\
}\
}\
}
function animations:video_add/main with storage video:school video 最后一行function必须在配置文件结尾写,且video:后面的命名必须和name值相同
sounds.json
{
"video_text":{
"sounds":[
{
"name": "animation:video/video_text",
"stream": true,
"volume": 0.8,
"weight": 1
}
]
},
"":{
"name": "",
"stream": true,
"volume": 0.8,
"weight": 1
}
}
其中video_text应写在sound配置项中
{sound:"video_text"}
你可以添加很多这种配置来添加新的视频声音 事例下方为空白模板
更多配置内容可以看
JAVA版声音事件
你可以在资源包内的材质文件夹里新建一个名为Video的视频文件夹存放图片序列
video/video_text/video0000.png
video/video_text/video....
如果命名空间为video 那么path可以这样写 {video:video/video_text}
可以参考
装备遮罩(camera_overlay)的一点研究
By CR_019
开始播放
/function animations:start {video_name:"video_name"}
video_name就是上文data中写入的字符串
/function animations:stop
/function animations:pause
/function animations:continue_play
/function animations:player_video_play/storages/delete/delete_player {name:"name"}
name为玩家名
/function animations:player_video_play/storages/delete/all_storages/delete
/function animations:video_list/delete_only {name:"name"}
name为视频配置项中的name
/function animations:video_list/delete_all
以上是几种常见软件导出图像序列的方法,您可以根据自己的需求选择合适的软件和步骤进行操作。
由于我的世界支持自适应纹理,推荐导出较小尺寸的图片以节约硬盘空间减小资源包大小 推荐导出960 * 540大小的图片
由于mojang石山代码,导致播放完的图片会一直在内存中无法清理,容易触发爆内存的问题,不建议在内存过小的情况下使用 Bug:MC-277837