开启左侧

[原创][教程]如何在MC MTR里导入视频

[复制链接]
Hobbytimeblank 作者认证 2024-2-4 23:31:55

还没有账号?赶快去注册吧!

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 Hobbytimeblank 于 2024-3-21 21:12 编辑

注:该教程为我一人测试编写,如有误可以在评论区指出。但不可以抄袭或转发到其他平台
为防止在批量提取帧时内存炸裂,建议使用较短的视频
做这一切是很繁琐的,因此请全部看完后再决定要不要使用
由于我没有B站账号,请不要联系我发教程视频

在原版MC中我们能导入地图画,
有了NTE模组的帮助我们可以在我的世界导入3D的obj模型了,

所以我想视频怎么不能导入呢?当然可以,于是就有了这个教程。
不需要额外下载模组,我们只需要一个名为Imagemap3的软件以及自己选择一款从视频中批量提取帧的软件就可以了。在MC里可以装个辅助建造的worldedit
支持几乎所有视频格式如.mp4,当然.gif动态图像也可以导入。导入后的帧率最大是10帧,但不推荐将帧率拉满
第零步、从视频/动态图像中批量提取帧。你需要先确定每2帧之间的间隔,我比较喜欢两帧之间隔0.4秒
我这个示例视频有3分钟31秒,总共提取出529张图片


如果你有合适的软件可以用软件批量提取然而我没有
于是我决定使用一种特殊的方法,我打上了python的moviepy库的主意。。。


第一步、打开Imagemap3软件并根据提示选择好你所需要导入视频的存档,然后选择"Import maps"选项卡,点击open然后选择刚刚导出图片的路径,Ctrl+A全选路径下的图片,点击打开。


接下来会弹出一个名为"Import"的窗口,其他选项都别动,直接看Width和Height这两个框,他们表示你在游戏中的视频以多少尺寸播放。推荐都设为1,屏幕最小,后面设置最方便。设置好后点击“Confirm All”一项。
注意这时候软件有可能崩溃,这表示你电脑内存不足,此时你需要分几次导入,要重复这个步骤几次。
记下第一张地图画的序号(例如这里是map_0)和最后一张地图画的序号(例如这里是map_528)点击Send All to World 记得取消勾选Add new maps to inventory。
这样所有的图片都会以地图画的形式保存在你的世界里。
第二步、打开你的游戏,并找到足够数量的常加载区块。如果你不了解什么是常加载区块,请看这里区块 - Minecraft Wiki,最详细的我的世界百科
请注意,接下来的所有操作都必须在区块加载等级为31及以下的区块内完成,否则绝对失效。
放置一个命令方块,输入这个指令:
execute as @e[tag=tag,type=minecraft:item_frame] run data merge entity @s {Item: {id: "minecraft:filled_map", Count:1b,tag:{map:number}}}

上面指令中标绿的部分是需要修改的,前者的tag可以修改成自定义的名字,但针对同一个视频这个值必须一致。后者number是刚才记录的地图画的序号,第一个就设置成前面第一张的地图画的序号,这里为0,后面的依次按照视频导出帧顺序排列。如果你导入时顺序没问题,那么这时候下一个命令方块就是number值就是增加1了。
接下来就是全是体力全是肝没有任何技巧的时间(当然,不排除有大佬能自己敲代码写全自动导入的服务器插件)


像这样一个命令方块一(多)个中继器,中继器的档位每一档都是跟你刚才从视频提取的帧率有关。我这里是2.5帧也就是0.4秒切换一次画面。那么每个中继器的档位就是4。在帧率最高为10帧的时候,0.1秒切换一次画面就是每个中继器档位为1,也就是放下就行,不用调中继器。在低于2.5帧时因为中继器没有第五挡,所以你需要增加中继器。利用这个特性,在同一个视频中帧率可以在不同段落不一致。不过这样比较影响观看效果。每个命令方块里都写上面的那个指令,number一般每隔一个命令方块是要增加1的。如果你不按顺序导入地图画,那number就得根据你自己的情况设置了。
如果已经到达了常加载区块的边缘,那你必须折回来,就像这样。横折竖折都可以。


第三步、调用该命令方块阵
有2种调用方法,但无论是哪种方法都需要先放置一个物品展示框
面朝着这个展示框然后输入下面的指令,其中蓝字是展示框的uuid,可以tab补全。输完指令别急着回车,在指令末尾加一个刚刚命令方块里写的那个标绿的tag,我这里前面输的tag是movie1因此我实际输入的指令是/tag 56a4cb85-7132-4378-845a-1dffa517ca5d add movie1

如果觉得展示框边缘突兀,可以输入/data merge entity <展示框的uuid> {Invisible:1}
第一种调用方法:
直接在刚才的第一个命令方块上放置按钮,这样按下按钮后播放的视频只会播放一遍,适合单人使用。但一个世界如果有多个这样的播放器就会出现兼容问题。

第二种调用方法:

拿出红石粉将最后一个命令方块的尾部和第一个命令方块相连,这样视频按一次按钮就可以循环播放。适合在公共场所使用。
第四步、添加音频文件

访问这个网址MP4轉OGG轉換器。在线自由 — Convertio然后把你的视频拖进去,它就能帮你把视频文件中的音频提取出来。
下载完提取的音频后用将其制作为音频的追加包。追加音频的教程已经有很多,这里不多说。
接下来在第一个命令方块旁边放置另一个命令方块并输入如下指令
execute at @e[type=minecraft:item_frame] run playsound <声音id> master @a[distance=0..<int 声音传播范围>]
注意部分版本可能会因为帧率导致红石延迟,出现音画倍速不同步的问题这时你需要更换别的MC版本,或者将音频切片。

音频文件此刻添加完成
第五步、添加字幕和外部互动链接
在需要添加字幕的帧所对命令方块的上下左或右添加另一个命令方块,输入
execute at @e[type=minecraft:item_frame,tag=<你前面写的tag>] run title @a[distance=<玩家所在范围,本标签可用位置x,y,z,dx,dy,dz取代>] title <Json文本>
如果有第二行字幕则在那个命令方块的另一个方位再贴一个命令方块,输入
execute at @e[type=minecraft:item_frame,tag=<你前面写的tag>] run title @a[distance=<玩家所在范围,本标签可用位置x,y,z,dx,dy,dz取代>] subtitle <Json文本>
如果有第三行字幕则在那个命令方块的另一个方位再贴一个命令方块,输入
execute at @e[type=minecraft:item_frame,tag=<你前面写的tag>] run title @a[distance=<玩家所在范围,本标签可用位置x,y,z,dx,dy,dz取代>] actionbar <Json文本>

*字幕最好短一点,不然有可能会有部分内容在屏幕外无法显示
成功后效果是这样的


外部互动链接,凡是命令方块能使用的指令都可以。
例如我们希望在视频播放完毕后自毁播放器,就可以在最后一个命令方块旁边贴一个命令方块,里面写
execute at @e[type=minecraft:item_frame,tag=<你前面写的tag>] run summon tnt


这个教程不仅能在MTR模组使用,还能在原版MC使用。但是最大的问题就是导入很麻烦。
有时会遇到加载问题,在视频播放的时候有几帧可能展示框是空白的,什么也没有。这是因为服务端在播放的时候客户端还没有来得及接受保存地图画导致的。一般看第二遍同一个视频就不会有问题了。
以上就是如何在我的世界MTR模组导入视频的教程了。如果有什么更好的方案欢迎讨论。有问题也可以提出。



你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
明星喵 2024-2-7 12:05:25
牛比
jiaqi 2024-3-21 20:37:09
webdisplays模组:?+?+? 你在我服里一点用过

评分

参与人数 1人气 +1 收起 理由
Hobbytimeblank + 1 是的 但这样不能方便spigot和paper.

查看全部评分

旭日服务器 暂停对外开放
MCWinBuild 2024-7-11 09:31:09
本帖最后由 MCWinBuild 于 2024-8-19 07:58 编辑

我记得以前可以使用格式工厂转换成每个帧

你 被 骗 了(跨时空诈骗

其实可以搞到PIDS动态上但是我会弄PIDS(为保安全,[某人行李把扶梯摔了],携带大型行李的乘客请使用大型升降机)
或许人去楼空,物是人非,只留下当时的记忆-----与经历者的怀念?
邮箱 MCWinBuild@sohu.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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