以C#文件大小录制视频/图像信息是巨大的
本文关键字:信息 图像 巨大 视频 文件大小 | 更新日期: 2023-09-27 17:58:31
我正在使用MS Kinect录制和回放颜色、深度和骨架输出。我正在使用BinaryWriter
将此信息写入文件。该过程运行良好,但文件大小在短时间内会变得巨大(5分钟内约15 GB)。自然地,当调用"重播此信息"时,加载此大小的文件需要一段时间才能开始播放。而需要的是能够记录大约1小时的输出。按照这个速度,到录制结束时,它将是180 GB的文件,我猜这将太多,无法加载和开始即时播放。
一个潜在的解决方案是检测文件大小何时达到1GB,然后创建另一个文件并不断重复这个过程。这样的话,我最终会得到几个1GB的文件,用于1小时的录制。为了重播,我会一个接一个地加载它们。
在我开始做这件事之前,我必须记住Kinect的输出是连续不断的。因此,创建新文件可能会花费大量的时间。
问题:
-
.NET中现有的文件编写API是否提供了一种自动检测文件大小和创建另一个文件等的方法?
-
每隔几秒钟创建一个新文件会是一个很大的开销吗?由于我希望记录的信息以每秒30帧的速度流入,这可能意味着在创建文件时会丢失一些信息,等等。
我想我需要高精度,因为这是一个研究应用。我刚做了另一个测试30分钟的深度,彩色捕获最终得到了近98 Gb的文件。使用此代码(来自Kinect.Toolbox)将永远播放-{
while (reader.BaseStream.Position != reader.BaseStream.Length)
{
KinectRecordOptions header = (KinectRecordOptions)reader.ReadInt32();
switch (header)
{
case KinectRecordOptions.Color:
colorReplay.AddFrame(reader);
break;
case KinectRecordOptions.Depth:
depthReplay.AddFrame(reader);
break;
case KinectRecordOptions.Skeletons:
skeletonReplay.AddFrame(reader);
break;
}
}
}
如果你不需要高精度,你可以降低采样率,这样你仍然有足够的时间支持fps,你可以用更小的文件大小回放它们。
Kinect捕获了大量信息,因此最好准确定位要播放的内容,并只保存这些信息。