You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Accord .Net中WriteVideoFrame无法识别Bitmap参数的问题求助

解决Accord.NET WriteVideoFrame参数无效的问题

核心问题排查

1. 视频分辨率参数顺序错误

你的writer.Open方法中宽度和高度参数顺序写反了。Accord.NET的VideoFileWriter.Open方法定义为:

public void Open(string fileName, int width, int height, int frameRate, VideoCodec codec);

你传入的是frameHeight作为第一个尺寸参数、frameWidth作为第二个,这会导致视频文件分辨率与实际捕获帧的分辨率不匹配,触发参数无效错误。

2. Graphics对象锁定Bitmap导致写入失败

在videoSourcePlayer_NewFrame事件中,你通过Graphics.FromImage(args.Frame)创建了Graphics对象,但在调用WriteVideoFrame前未释放该对象,这会导致Bitmap被锁定,无法被视频写入器访问。

3. 原帧可能被后续操作复用

Accord.NET的NewFrameEventArgs.Frame是复用对象,直接写入可能引发资源冲突,建议克隆帧后再进行写入操作。

修复后的代码

1. 修正视频打开的分辨率参数顺序

修改button1_Click中的Open调用:

private void button1_Click(object sender, EventArgs e)
{
    writer = new VideoFileWriter();
    // 注意参数顺序:width在前,height在后
    writer.Open("ruta_del_video.mp4", frameWidth, frameHeight, 30, VideoCodec.MPEG4);
}

2. 调整Graphics释放时机并克隆帧

修改videoSourcePlayer_NewFrame方法:

private void videoSourcePlayer_NewFrame(object sender, NewFrameEventArgs args)
{
    DateTime now = DateTime.Now;
    // 克隆原帧,避免锁定或复用冲突
    using (Bitmap frameClone = new Bitmap(args.Frame))
    {
        using (Graphics g = Graphics.FromImage(frameClone))
        {
            // 可在此添加绘制操作,比如时间戳
            g.DrawString(now.ToString(), SystemFonts.DefaultFont, Brushes.Red, 10, 10);
        }

        if (writer != null && writer.IsOpen)
        {
            writer.WriteVideoFrame(frameClone);
        }
    }
}

3. 完善资源释放逻辑

确保button2_Click中的释放逻辑安全,避免空引用:

private void button2_Click(object sender, EventArgs e)
{
    if (writer != null)
    {
        if (writer.IsOpen)
            writer.Close();
        writer.Dispose();
        writer = null;
    }
}

额外注意事项

  • 确保frameWidth和frameHeight在摄像头初始化后正确赋值,可在OpenVideoSource中添加非零检查,避免无效尺寸。
  • 测试时使用绝对路径保存视频(比如@"C:\temp\record.mp4"),避免相对路径导致的文件访问问题。
  • 确认项目已正确引用Accord.Video.FFMPEG的原生库(x86/x64的ffmpeg相关dll),缺失库也可能引发写入失败。

内容的提问来源于stack exchange,提问作者Jersson Garzon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 22:52:48