如何解决用 C# 录制全高清 60 FPS 视频
我的应用程序使用高速相机。我正在尝试使用 C# 录制视频文件。
任务非常“简单”:从相机录制视频。我们需要录制中等(更高更好)质量的视频以保存尽可能多的细节。
- 分辨率: 1920 x 1080(全高清)
- 每秒帧数 (FPS): 60
- 比特率:我从 10000*1000 开始(但现在我不知道)
- Mediacontainer:MP4、AVI(无所谓,我们只需要 解决我们的任务)
- 编解码器:也无所谓,我们只需要速度和质量。
- 视频文件的最大大小:10 GB/小时
在录制过程中,相机本身(而不是用户)可以更改相机的帧率,因此有必要为每一帧或其他任何东西设置时间戳。
问题录制速度不够快。 示例:使用 AForge 库,生成图片(“白”噪声),测试视频时长为 20 秒。
使用不同编解码器(由 AForge 提供)创建视频的持续时间:
- 编解码器:MPEG4,时间:33,703
- 编解码器:WMV1,时间:45,338
- 编解码器:WMV2,时间:45,530
- 编解码器:MSMPEG4v2,时间:43,775
- 编解码器:MSMPEG4v3,时间:44,390
- 编解码器:H263P,时间:38,894
- 编解码器:FLV1,时间:39,151
- 编解码器:MPEG2,时间:35,561
- 编解码器:原始,时间:61,456
我们尝试过的另一个库对我们不满意。 由于奇怪的内部异常,Accord.FFMPEG 很慢。 EmguCV.FFMPEG 没有时间戳,因此它会创建损坏的视频。
将视频录制到 SSD 驱动器并没有给我们任何明显的加速。
Google 搜索没有提供明确的示例或现代解决方案来解决此任务。这是写在这里的主要原因。
有我们测试的代码示例:
private static void AForge_test()
{
Console.WriteLine("AForge test started...");
unsafe
{
Stopwatch watch = new Stopwatch();
Console.WriteLine("FPS: {0},W:{1},H:{2},T:{3}",fps,w,h,time);
AForge.Video.FFMPEG.VideoCodec[] codecs = (AForge.Video.FFMPEG.VideoCodec[]) Enum.GetValues(typeof(AForge.Video.FFMPEG.VideoCodec));
for(int k = 0; k < codecs.Length; k++)
{
/* if (codecs[k] != VideoCodec.MPEG4)
continue;*/
try
{
watch.Restart();
Random r2 = new Random(200);
AForge.Video.FFMPEG.VideoFileWriter vw = new AForge.Video.FFMPEG.VideoFileWriter();
string name = String.Format("E:\\VideosHDD\\AForge_test_{0}_mid.avi",Enum.GetName(typeof(AForge.Video.FFMPEG.VideoCodec),codecs[k]));
vw.Open(name,codecs[k],10000 * 1000);
for (int i = 0; i < frames; i++)
{
vw.WriteVideoFrame(bmps[i%N]);
}
vw.Close();
vw.dispose();
watch.Stop();
Console.WriteLine("Codec: {0},Time: {1:F3}",codecs[k]),watch.ElapsedMilliseconds / 1000d);
}
catch(Exception ex)
{
Console.WriteLine("Error " + codecs[k].ToString());
}
}
}
Console.ReadKey();
}
附加:
- 我们已经准备好使用非免费的解决方案,但最好是免费的。
- 记录速度低的推测原因之一:(x86) 应用程序构建。我非常努力地寻找 x64 Aforge 建筑,但失败了。我们真的不知道应用架构对录制速度有什么影响。
我确定我不知道视频录制的所有背景和另一个“小”东西,所以我很乐意提供清晰解释的解决方案。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。