将Texture2D转换为视频

问题描述 投票:0回答:2

我做了很多研究,但是找不到适合Unity3d / c#的合适解决方案。我正在使用Fove-HMD,并想录制/制作集成摄像机的视频。到目前为止,我已经管理了每个更新以拍摄摄像机的快照,但是我找不到将这些快照合并到视频中的方法。有人知道转换它们的方法吗?还是有人可以指出正确的方向,使我可以继续研究?

public class FoveCamera : SingletonBase<FoveCamera>{

 private bool camAvailable;
 private WebCamTexture foveCamera;
 private List<Texture2D> snapshots;

 void Start ()
 {
     //-------------just checking if webcam is available
     WebCamDevice[] devices = WebCamTexture.devices;
     if (devices.Length == 0)
     {
         Debug.LogError("FoveCamera could not be found.");
         camAvailable = false;
         return;
     }

     foreach (WebCamDevice device in devices)
     {
         if (device.name.Equals("FOVE Eyes"))
             foveCamera = new WebCamTexture(device.name);//screen.width and screen.height 
     }

     if (foveCamera == null)
     {
         Debug.LogError("FoveCamera could not be found.");
         return;
     }
     //-------------camera found, start with the video

     foveCamera.Play();
     camAvailable = true;
 }

 void Update () {
     if (!camAvailable)
     {
         return;
     }

     //loading snap from camera
     Texture2D snap = new Texture2D(foveCamera.width,foveCamera.height);
     snap.SetPixels(foveCamera.GetPixels());
     snapshots.Add(snap);
 }
}

该代码到目前为止有效。启动方法的第一部分仅用于查找和启用摄像机。在“更新方法”中,我将每次更新视频的快照。

“停止”更新方法后,我想将收集的Texture2D对象转换为视频。

提前感谢

c# unity3d video webcam texture2d
2个回答
0
投票

我在这里看到两种方法,一种方法实现速度快,很脏,并且不适用于所有平台,第二种方法更难但很漂亮。两者都依赖FFMPEG。

1)将每一帧保存到图像文件(snap.EncodeToPNG())中,然后调用FFMPEG从图像创建视频(FFmpeg create video from images)-由于许多磁盘操作,速度很慢。

2)通过AForge中实现的包装器使用FFMPEG,并为其VideoFileWriter类提供您拥有的图像。Image sequence to video stream?

问题在于它使用了System.Bitmap,因此,为了将Texture2D转换为位图,您可以使用:How to create bitmap from byte array?

所以您最终得到类似的东西:

Bitmap bmp;
Texture2D snap;
using (var ms = new MemoryStream(snap.EncodeToPNG()))
{
    bmp = new Bitmap(ms);
}
vFWriter.WriteVideoFrame(bmp);

虽然这两种方法都不是最快的方法,所以如果此处的性能问题,您可能希望对DirectX或OpenGL纹理之类的较低级别的数据进行操作。


0
投票

由于我无法评论(doh),所以这里有一些代码的链接,这些代码可以转换为位图,这将有助于实现上述FFMPEG。 https://gist.github.com/DashW/74d726293c0d3aeb53f4

© www.soinside.com 2019 - 2024. All rights reserved.