gpt4 book ai didi

c# - 直接从内存中将 WPF BitmapSources 保存为 h264 编码的视频

转载 作者:行者123 更新时间:2023-12-04 23:00:01 25 4
gpt4 key购买 nike

目前我正在使用列表变量来存储相机提供的 BitmapSources 并在 SharpAvi 的帮助下将它们保存为 AVI 文件。 .在第二步中,我通过 Nrecos ffmpeg wrapper 对保存的文件进行编码。以减小文件大小。最后我删除了原始的 AVI 文件,只保留编码的文件。

对我来说,这似乎设计得很糟糕,并且可能会对运行应用程序的 SSD 造成有害的写入周期(我可能每天在未编码的视频中创建多达 TB),这就是为什么我想将其更改为更集成的利用 PC 的 RAM 的解决方案。
然而,SharpAvi 和 Nreco 依赖于创建和读取实际文件。
Nreco 确实有 ConvertLiveMedia接受流的方法 - 但是在我的实验中,它根本没有创建文件,同时没有给我任何错误警告。

最佳答案

好的,我想我解决了:
我更改了 SharpAvi 代码,以便 AviWriter 有一个额外的构造函数接受 MemoryStream 而不仅仅是一个字符串。然后将此 MemoryStream 传递给 BinaryWriter 并且不创建 FileStream。

还必须更改关闭方法,以便即使在 BinaryWriter 关闭时 MemoryStream 也能保持事件状态。 fileWriter.Close被替换为

if (fileWriter.BaseStream is MemoryStream)
fileWriter.Flush();
else
fileWriter.Close();

这在我的主应用程序中留下了一个可用的 MemoryStream。
memstream.Position = 0; //crucial or otherwise ffmpeg will not work
var task = nrecoconverter.ConvertLiveMedia(memstream, "avi", filepath, "avi", settings);
task.Start();
task.Wait();

编辑:SharpAvi 已在 github 上正式更改,现在允许使用 Streams。

关于c# - 直接从内存中将 WPF BitmapSources 保存为 h264 编码的视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40909238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com