大家好!我在 GRASS 这个合作割草游戏中开发时间流系统。在你割草的同时,一台隐藏的摄像机在草坪上方每隔几秒渲染一帧到 RenderTexture,最后在得分屏上回放整个画面,并且可以导出剪辑供分享。我刚在角落加了一个徽标,并提升了画质。
其内部实现是 URP 的 SubmitRenderRequest 将帧渲染到离屏摄像机,使用 AsyncGPUReadback,将 JPEG 通过工作线程写入磁盘,最后由捆绑的 ffmpeg 使用 libx264 完成编码。会话时长可从 5 分钟到超过 1 小时,一旦帧数达到 480 帧,它会跳过每第二帧并将间隔加倍,最终视频长度在 20 到 60 秒之间,取决于你割草的时间。
最棘手的部分是编码。割草基本上是视频压缩的最差情况,因为每根草叶都是细小的细节,每帧都会微微移动,编码几乎得不到运动预测的帮助。当前使用 1080p、preset medium、CRF 16,60 秒的剪辑大约 140 MB,远超 Discord 免费限制。把 CRF 提高或降低分辨率,割草就会变成颗粒状的糊状画面。
有人建议使用更慢的 preset 并在编码前加入轻微降噪,我打算尝试一下。
还有其他人处理过大量植被画面的编码吗?我很想听听你们的经验。
评论 (0)