使用 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);

videoCaptureDeviceNewFrame 事件中,我正在做:

    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)对文档进行分类

无法使用 Accord.Net 框架实现基本决策树

C# 9/10 .net 6 中基于网络摄像头的对象扫描器 [关闭]

以高分辨率从网络摄像头捕获图片,同时使用 DirectShow.Net 以较低的分辨率进行预览

在c#中将XML文件转换为csv文件格式

在 C# 中获取网络摄像头的当前状态