用C#录制视频

时间:2014-07-26 12:16:32

标签: c# video ffmpeg

我必须执行以下操作:使用C#从摄像机录制视频。我使用的相机产生视频帧(帧率不固定),我必须以某种方式将所有帧放在一起并创建视频文件。此外,我需要使用不同的编解码器,如AVI或MPEG4(这些编解码器是必需的,其他编解码器是可选的)。

我遇到的主要问题是如何创建未修复帧率的视频。我有一个帧流,例如我可以在1ms之后恢复第一帧,然后在20ms之后,然后是36ms,依此类推。如果我以25帧/秒创建视频,结果将是错误的,因为这意味着在40ms后添加帧。

我尝试使用Aforge.Video库,它有一个方法http://www.aforgenet.com/framework/docs/html/84a560df-bfd5-e0d6-2812-f810b56a254d.htm,它根据时间跨度添加一个帧。但是这种方法在设置比特率方面存在问题 - 我传递给方法的比特率值被忽略(http://www.aforgenet.com/forum/viewtopic.php?f=2&t=2665)。

所以我的问题是:是否有一些C#库我可以用于视频录制?我必须支持AVI和MPEG4,也可以设置比特率和最后但并非最不重要的 - 具有可变帧速率的记录视频。

提前致谢。任何建议都会非常有用。

UPD1:我无法直接连接到相机 - 我所拥有的只是一个帧流,我需要在运行时将此流转换为视频。

UPD2:我正在寻找的库应该满足以下属性。它必须包含一个方法(或某种方式如何做同样的事情)来添加带有时间戳的下一帧,就像在Aforge.Video.FFMPEG中一样:

public void WriteVideoFrame(Bitmap frame, TimeSpan timestamp)

应该可以选择不同的编解码器(至少AVI和MPEG4)并设置比特率。 是否有一些替代Aforge.Video.FFMPEG?由于Aforge无法正常工作 - 比特率值被忽略,因此也不支持某些编解码器(例如MPEG2)。

UPD3:关于编解码器许可证的另外一个问题。如果我使用开源库,我应该担心编解码器许可吗?

1 个答案:

答案 0 :(得分:2)

  • AVI和MPEG4不是编解码器,而是容器格式
  • API和库都是众所周知的,这里的问题是特定格式和编解码器有其自身的局限性,例如: AVI文件必须具有固定的视频帧速率(解决方法是您可能具有跳过帧的高FPS文件)
  • 图书馆搜索和推荐Qs被认为是基于SO
  • 的偏离主题和意见

您通常使用C#代码进行视频录制的最佳控件API是DirectShow到DirectShow.NET库。您选择格式和编解码器,AVI多路复用器可作为库存组件使用,还有第三方替换。对于MPEG-4(.MP4),您需要第三方组件,例如this。视频压缩组件通常受第三方过滤器选择。