c# - 用 C# 录制视频

标签 c# video ffmpeg

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

我面临的主要问题是如何创建帧率不固定的视频。我有一个帧流,例如我可以在 1ms 之后接收第一帧,然后在 20ms 之后,然后在 36ms 之后等等。如果我以 25 帧/秒的速度创建视频,结果将是错误的,因为这意味着帧是在 40 毫秒后添加的。

我尝试使用 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:关于编解码器许可证的另一个问题。如果我使用开源库,我应该担心编解码器许可证吗?

最佳答案

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

    您通常在 C# 代码中用于视频录制的最佳控制 API 是 DirectShow 到 DirectShow.NET。图书馆。您可以选择格式和编解码器,AVI 多路复用器作为库存组件提供,并且有第三方替代品。对于 MPEG-4 ( .MP4 ),您需要第三方组件,例如this .视频压缩组件通常受第三方过滤器选择的影响。

    关于c# - 用 C# 录制视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24970921/

    相关文章:

    c# - system.data.oledb.oledbexception (0x80004005) : could not find file

    ffmpeg - 如何在 FFmpeg 的视频中为具有文本大小的文本添加背景图像?

    c# - TimeSpan ToString 格式

    c# gridview 行点击

    c# - 从数组中获取 n 最低的最快方法

    php - 使用声明的参数向函数添加更多参数

    python - discord.ext.commands.errors.CommandInvokeError : Command raised an exception: TypeError: __init__() missing 1 required positional argument: 'source'

    java - 有没有播放视频的框架或cocoa API?

    c++ - 在 AVI、H.264 文件中查找关键帧

    java - 退出 OPENCV 248 JAVA 后网络摄像头应用程序不会关闭