redhat9i 发表于 2022-1-22 14:09

【UE4】多媒体源相关事项(序列帧、WEBM、MOV、MP4 ...

一、算法动图——PhotoMosh网页制作

这个网站真好。
比如加些常见的Jitter抖动效果,BadTV坏电视效果,RGB Shift抖音效果,Scanlines扫描效果。可以直接存储为GIF或WEBM格式,导入引擎中使用(JPG是单张图片)。这样就不用在引擎内部实现相关算法了,而且不像固定算法那样有序,对所有的资源都进行一样的算法处理。 这个效果就挺多的。





GIF

GIF是有损的,Webm是无损的。用Webm挺好。



Webm传不上来


二、引擎支持的视频格式

引擎的Media Player只支持MP4格式,且视频解析格式为H.264,H.265会变成HEVC,是会报错播放不了视频的。
【1】GIF

GIF的图导不进去格式不支持,Webm能导进去但是解析不了不能播放。


有支持GIF格式的插件。
但商城找不到是因为大佬开源了。
但没有新版本,支持5得自己改,应该不是很麻烦,但还是懒得去碰源码,所以不用GIF这套方案了,关键是从网上下下来GIF的质量已经有丢损了。


【2】Webm

引擎是原生态支持的,可是找谷哥哥度娘娘输入关键词没有相关信息。
勾选重启再用MediaPlayer播放还是不行的。


没有相关Webm的插件设置。


三、用Handbrake将Webm视频批量转为MP4格式.

即使你在文件管理器中直接把Webm后缀改为MP4,视频能双击播放,但是导入至引擎就不一定了,是会报错的。那种改后缀的做法是不正确的。


文件资源管理器中的Frame Width、Height显示安排上。(不用再AltEnter看视频参数了)
【1】File Open Source将视频文件夹加载进来(Batch Scan批量扫描)



【2】偏好设置输出视频名称和格式:同名、MP4

source原名字,不大写,不加空格之类的。


【3】设置视频输出质量、帧率及解码格式:无损、源帧速率、H.264



一定要记得Video Encoder视频解码格式为H.264,H.265到引擎中会变成HEVC,视频是播放不了的。




Webm可能没有帧速率。


【4】设置视频输出分辨率

一般就是设置这三种。
1.Resolution and Scaling 和Final Dimensions(Automatic)


设置完后确保主页这里跟原来的视频分辨率一样就行。


2.Preset 视频预设。
如果你的视频分辨率比较高的话,如width两千多,可以用4K预设,要不然导出的视频显示相较原来比较小。


【5】Add All添加到批处理序列,就可以批量转换视频格式了。

跟UE4的Movie Render Queue一样。


不同的Presets预设文件大小都不同,看自己需求。288P、720P以及1080P看起来是没有什么区别的。


MOV转MP4跟Webm转MP4的预设和操作都是一样的。
【6】视频格式批量转换三部曲:


[*]Open Source,把文件夹拖拽进来。(会自动扫描文件夹下面的所有视频资源)
[*]Add All,把视频资源都添加到渲染序列中。
[*]Start Encode,开始对大量同等分辨率的视频进行批量转视频格式操作。


可以在偏好设置中勾选显示这个Add All UI。


然后依次点这三个按钮就可以批量转换视频格式了。(或Alt+O然后点后两个按钮)


【7】导入引擎,用Media Player播放


【UE4】自定义动态UV贴图
https://www.zhihu.com/video/1434281316771049472
【8】放入关卡中,视频分辨率自适配

获取Media Texture的宽高才可以;Media Player的Dimensions不行,始终是0。
然后暴露Media Source也就是文件资源路径变量和材质球中的两个参数变量就好了。方便放到场景中变对象快捷编辑。


可以再加个SizeFactor控制视频缩放。如1920,1080尺寸太大了,给个缩放因子100。


这样场景中视频尺寸就变成19.20,10.80了,尺寸小点刚好。


【9】在同一个场景中播放多个视频

对于MediaPlayer,场景中许多不同的屏幕对象Open不同的MediaFilePath还是属于类级别的,是会统一改动的。


我们已经导入了非常多的MediaFilePath,而MediaTexture和MediaPlayer是一对一高度绑定的。

[*]一个MediaTexture对应一个MediaPlayer
[*]一个MediaPlayer统计所有的MediaFilePath


经过测试,场景中播放多个不同的视频还是用数组比较好。只需要更改PlayIndex播放序列即可。


MediaFilePath导入的时候就有很多了。只需要自动化创建多个MediaPlayer和MediaTexture就好了。
而每回创建MediaPlayer的时候它都会让我们勾选MediaTexture,一对一的,直接是绑定好的。


然后用Autohotkey 写些自动化脚本。这里屏幕是1920*1080的。
当鼠标放在屏幕最左上角时,鼠标位置应该是(0,0),所以我们取Screen值。




AHK还是有点麻烦。有时候还点跑偏了。
!x::
          MouseGetPos x,y
          Click 70,668
          Click 168,905
          MouseMove, 522,834
          sleep 5000
          Click
          Click 857,492
          Click 990,586
          Click 1800,988

          MouseMove %x%,%y%
          Return;创建MediaPlayer和MediaTexture用这个TinyTask就挺好。
跟Python一样做些自动化创建工作,设置Printscreen为录制快捷键,F12为播放鼠标操作快捷键。


批量创建资源:
批量创建完后,筛选类别。


内容浏览器点Columns,再回到Tiles,资源会自动按照名称顺序排列。


然后把它们拖拽到数组变量上即可。


大功告成。
【10】关卡Runtime运行状态不能播放视频

只需要把构造脚本里面的蓝图放给Event Begin Play即可。

[*]UE4 – Be careful with the Construction Script - 知乎 (zhihu.com)
每次Actor出生、移动、属性更改的时候,构造脚本就会执行一遍。放在场景中的对象的变量值我们都是在关卡中定好的,不会随着编译更改,所以只需要把语句给到初始事件即可。
【11】渲染导出视频播放速度超级快


[*]ue4视频材质贴图导出动画播放速度过快的问题_ue4吧_百度贴吧 (baidu.com)
[*]Unreal中播放的图片序列与其重新导出的动画序列速度不一致的问题_SHCQMY的博客-CSDN博客_ue4动画序列镜头输出不匹配
[*]Media Player speed on Sequencer Render out - UE4 AnswerHub (unrealengine.com)
[*]Is Media Framework Video Playback Tied to the Main Game Loop? - UE4 AnswerHub (unrealengine.com)
解决办法:不用File Media Source,改用Img Media Source。不管你是渲出来PNG图片,还是AVI视频,速度一样相比在场景中的播放速度都是超级快的。




AE中设置播放速度好像也可以。




另外设置这个Affected by PIEHandling是不管用的。(一看注释就知道了,没看注释还以为它能够解决问题)


PIE——Play In Editor


另外,这个Image File Path是不支持数组的,+加号批量添加。而且它只支持序列图片,导入时也不能设置成导入为Image File Path格式,而是自动变为MediaFilePath格式,就很难受。


最终解决办法:设置播放速度,这得根据关卡的FPS帧速率调节。
比如渲出来的视频到AE中看时,基本上5帧顶原视频的5s,如果原视频的帧速率是30fps的话,那么我需要1/30=0.033,让它慢播30倍,以配合当前场景的帧速率,当然了,肯定是个位数,这样视频就会同步播放了,不至于说特别快。


四、序列帧SubUV——PS Contact Sheet II制作

上面使用Media Player的方式播放贴图,这个就是SubUV Flipbook了。
【1】视频变序列帧图片





【2】Ctrl+Alt+A选中全部图层导出

渲染视频



[*]选择导出文件夹、Image Sequence图片序列、图片格式、图片尺寸。


Name是前缀,Digits是数字个数。无所谓,又不进引擎。


【3】用Contact Sheet II 制作SubUV贴图



不必再用这个什么TexturePacker了,图片处理就得让专业的软件来做:PS大法。
设置整体图片大小,每个小图片的大小,长宽及间距。这里是118张286乘286的。所以11*11=121。


合成好了,直接导出就好了。(可以用魔棒把白色背景删掉,弄成半透明的)


再用Flipbook一播放就好了。

【UE4】SubUV动画
https://www.zhihu.com/video/1434286734897360896
五、图片序列帧变成视频

定序器输出的PNG序列帧,用AE Import导入即可,选中第一个PNG,然后勾选PNG Sequence即可,就会将全部序列帧导入进来变成视频,然后用Aftercodec导出MP4视频即可。


如果渲染出来的视频帧数有丢失,那一定是帧速率的问题,比如30变成了25,跟AE渲染视频输出是一样的道理。


尽量保持跟定序器一样的帧速率,如下。如果你渲染时的帧速率是60FPS,那么最终肯定只渲了一半的镜头,但是帧数却跟定序器中的一样。


六、后记

以上只是简单的演示。DCC输出的当然是n*n小序列图能填满大图片的;DCC输出的当然直接是序列帧,以上PS导入视频只是为了像DCC一样制作序列帧。最终合成SubUV用PS合成就挺好。
综上,Media Player,SubUV Flipbook两种方法播放动图。一个是Filepath引用外部的视频资源,一个是序列化到本地的SubUV图片资源。
页: [1]
查看完整版本: 【UE4】多媒体源相关事项(序列帧、WEBM、MOV、MP4 ...