使用 C# Accord .Net 从网络摄像头录制视频
Posted
技术标签:
【中文标题】使用 C# Accord .Net 从网络摄像头录制视频【英文标题】:Recording video from webcam with C# Accord .Net 【发布时间】:2020-11-24 12:27:34 【问题描述】: 我正在尝试从我的网络摄像头录制视频。为此,我正在使用 Aforge 和 Accord。 我正在用 Windows 窗体构建它。 视频源和视频作者是:private AForge.Video.DirectShow.VideoCaptureDevice videoCaptureDevice = null;
private Accord.Video.FFMPEG.VideoFileWriter _writer;
我像这样对作者调用 Open :
var w = (int)Math.Round((double)pic.Width, 0);
var h = (int)Math.Round((double)pic.Height, 0);
_writer.Open(dialog.FileName, w, h,25,VideoCodec.MPEG4);
在 videoCaptureDevice 的 NewFrame 事件中,我正在做:
Bitmap b = (Bitmap)eventArgs.Frame.Clone();
if (recording)
if (firstFrameTime.HasValue)
_writer.WriteVideoFrame(b, DateTime.Now - firstFrameTime.Value);
else
_writer.WriteVideoFrame(b);
firstFrameTime = DateTime.Now;
我也试过了
_writer.WriteVideoFrame((Bitmap)eventArgs.Frame.Clone())
和
_writer.WriteVideoFrame(eventArgs.Frame)
但不断出现异常:参数无效
有什么想法我在这里做错了吗?
tnx
【问题讨论】:
【参考方案1】:哪个参数无效?这是我让它工作的唯一方法:
writer.Open(
<filename>.mp4,
FrameWidth, FrameHeight,
new Rational(Playback),
FFMPEG.VideoCodec.MPEG4
);
注意:文件名必须具有 .mp4 扩展名,并且 VideoCodec 必须是 MPEG4。
// Save Bitmap Frame; use one or other
writer.WriteVideoFrame(Frame);
writer.WriteVideoFrame(Frame, TimeSpan.FromTicks(Now.Ticks-FirstFrame));
注意:如果是后者,请使用时间跨度,而不是刻度。
【讨论】:
以上是关于使用 C# Accord .Net 从网络摄像头录制视频的主要内容,如果未能解决你的问题,请参考以下文章
如何使用朴素贝叶斯和主成分分析(C#、Accord.NET)对文档进行分类
C# 9/10 .net 6 中基于网络摄像头的对象扫描器 [关闭]