【Unity开发】Unity引擎生成2K视频的方法

最近在制作一个2560*1440 30fps的游戏序幕,以前制作我都是直接导出可执行文件后再直接录屏,不过这次分辨率要求较高帧率要求较稳,找了好多插件也没有找到直接生产视频的插件,于是稍微研究了一下给大家分享一下!

1、制作好场景的动画,建议直接代码完成游戏元件的运动

transform.position = Vector3.MoveTowards(transform.position, target.position,MoveSpeed * Time.deltaTime);
transform.rotation = Quaternion.RotateTowards(transform.rotation, target.rotation, RotateSpeed * Time.deltaTime);

2、将Unity引擎升级至Unity5.4及以上的版本

3、在Unity游戏试图新建一个模拟分辨率,并选用!从Unity5.4开始这里的模拟分辨率已经可以十分完善的直接模拟该分辨率环境进行渲染了!

【Unity开发】Unity引擎生成2K视频的方法_第1张图片

4、根据渲染的场景的复杂度降低时间流逝,由于我本次需要渲染的场景项目比较复杂,高达2000*2000且树木较多,水面覆盖较广,因此SetPassCall已上千,因此我这里将时间流逝将为了0.08!如果您要渲染的场景复杂度较高,不降低时间流逝后面渲染的可能会漏帧,至于到底降低至多少请根据渲染设备的实际配置及项目的复杂度、渲染的帧率自行选择!

【Unity开发】Unity引擎生成2K视频的方法_第2张图片

5、新建一个C#脚本文件,粘贴我的以下代码:

using UnityEngine;
using System.Collections;

public class 逐帧渲染 : MonoBehaviour {

	public int 渲染时长 = 30;
	public float 时间流逝 = 0.08f;
	public string 输出路径;
	public int 帧率 = 30;
	private int 帧=1;
	private bool 停止 = false;
	private string 文件名称;

	void Start ()
	{
		Invoke ("停止渲染", 渲染时长);
		Time.timeScale = 0;
		if (帧 < 10) {文件名称 = "0000" + 帧.ToString () + ".jpg";} 
		else if (帧 < 100) {文件名称 = "000" + 帧.ToString () + ".jpg";} 
		else if (帧 < 1000) {文件名称 = "00" + 帧.ToString () + ".jpg";} 
		else if (帧 < 10000) {文件名称 = "0" + 帧.ToString () + ".jpg";} 
		else {文件名称 = 帧.ToString () + ".jpg";} 
		Application.CaptureScreenshot (输出路径 + 文件名称);
		帧++;
		Time.timeScale = 时间流逝;
		InvokeRepeating ("渲染截图", 1f / (float)帧率, 1f / (float)帧率);
	}

	void Awake()
	{
		Application.targetFrameRate=帧率;
	}
		

	void 渲染截图 () {
		if (!停止) 
		{
			Time.timeScale = 0;
			if (帧 < 10) {文件名称 = "0000" + 帧.ToString () + ".png";} 
			else if (帧 < 100) {文件名称 = "000" + 帧.ToString () + ".png";} 
			else if (帧 < 1000) {文件名称 = "00" + 帧.ToString () + ".png";} 
			else if (帧 < 10000) {文件名称 = "0" + 帧.ToString () + ".png";} 
			else {文件名称 = 帧.ToString () + ".png";} 
			Application.CaptureScreenshot (输出路径 + 文件名称);
			帧++;
			Time.timeScale = 时间流逝;
		}
	}

	void 停止渲染 () {
		停止 = true;
		Time.timeScale = 0;
		CancelInvoke ("渲染截图");
		Debug.Log ("渲染完毕");
	}
}

6、将改脚本挂载至场景中的任意元件上,设置好输出路径、渲染的时长等,例如I:\tmpdir\,由于我的游戏序幕尚未完成,目前暂时设置渲染时长为5秒进行

【Unity开发】Unity引擎生成2K视频的方法_第3张图片

7、进入Unity播放模式,等待控制台输出渲染完毕后退出Unity
8、到https://ffmpeg.zeranoe.com/builds/下载ffmpeg工具
9、下载任意一款图片批量转换工具将Unity渲染的图片转为jpg,否则ffmpeg无法使用
10、打开命令与提示符,进入ffmpeg的bin目录


11、输入ffmpeg -threads 2 -y -r 30 -i I:/tmpdir/%05d.jpg -s 2560x1440 -vcodec copy I:/OutPut.avi
其中 -r 30中的30替换为第六步设置的帧率
其中 -i I:/tmpdir/%05d.jpg中的 I:/tmpdir/替换为第六步设置的路径
其中-s 2560x1440中的2560x1440替换为第三步模拟的分辨率
其中I:/OutPut.avi 替换为你的输出路径
12、视频生成完成,应该可以播放了

【Unity开发】Unity引擎生成2K视频的方法_第4张图片

13、重新打开您的Unity项目,将时间流逝改回1并使场景中尽量只保留音频组件,生成可执行文件,使用录屏软件内录音频
14、使用视频合成工具将音频赋给ffmpeg生成的视频
15、就这样,一个较高分辨率的视频就渲染完成了

 
  
 
  
 
 

你可能感兴趣的:(Unity开发,Csharp程序开发)