【问题标题】:Recording video from webcam with C# Accord .Net使用 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

【问题讨论】:

    标签: c# .net winforms aforge accord.net


    【解决方案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));
    

    注意:如果是后者,请使用时间跨度,而不是刻度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-10
      • 1970-01-01
      • 2017-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多