在.net中使用FFmpeg?

dan*_*iel 62 c# video ffmpeg

所以我知道这是一个相当大的挑战,但我想使用FFmpeg库在c#中编写一个基本的电影播放器​​/转换器.但是,我需要克服的第一个障碍是将FFmpeg库包装在c#中.我已经下载了ffmpeg但无法在Windows上编译它,所以我为我下载了一个预编译版本.太棒了.然后我开始寻找C#包装器.

我环顾四周,发现了一些包装器,如SharpFFmpeg(http://sourceforge.net/projects/sharpffmpeg/)和ffmpeg-sharp(http://code.google.com/p/ffmpeg-sharp/).首先,我想使用ffmpeg-sharp作为其LGPL而SharpFFmpeg是GPL.但是,它有很多编译错误.事实证明它是为单声道编译器编写的,我尝试用单声道编译它但无法弄清楚如何.然后我开始自己手动修复编译器错误,但遇到了一些可怕的错误,并认为我最好不要单独留下它们.所以我放弃了ffmpeg-sharp.

然后我看着SharpFFmpeg,它看起来像我想要的,所有P/Invoked函数.不过它的GPL?AVCodec.cs和AVFormat.cs文件看起来像avcodec.c和avformat.c的端口,我估计我可以移植自己?然后不必担心许可.

但是我想在开始编码之前做到这一点.我是不是该:

  1. 编写我自己的C++库以与ffmpeg交互,然后让我的C#程序与C++库通信以播放/转换视频等.

要么

  1. 通过使用大量的DllImports将端口avcodec.h和avformat.h(这就是我需要的全部吗?)到c#中并完全用C#编写?

首先要考虑的是我在C++方面并不擅长,因为我很少使用它,但我知道它足以绕过它.我认为#1的原因可能是更好的选择,因为大多数FFmpeg教程都是用C++编写的,而且我对内存管理的控制也比我在c#中做的要多.

你怎么看?您是否也碰巧使用FFmpeg有任何有用的链接(也许是教程)?

tob*_*obs 29

最初的问题现在已经超过5年了.与此同时,现在有一个来自ffmpeg的WinRT解决方案和来自Microsoft的集成示例的解决方案.

  • 还提到它是Windows 8或更高版本. (4认同)

Mar*_*ath 23

一些其他托管包装供您查看

在.NET中编写自己的interop包装器可能是一个耗时且困难的过程.为互操作编写C++库有一些优点 - 特别是因为它允许您大大简化C#代码的接口.但是,如果您只需要库的一个子集,那么在C#中进行互操作可能会让您的生活变得更轻松.


Vit*_*nko 5

GPL编译的ffmpeg只有在作为命令行实用程序的单独进程中调用时才可以从非GPL程序(商业项目)中使用; 与ffmpeg库链接的所有包装器(包括Microsoft的FFMpegInterop)只能使用ffmpeg的LGPL构建.

您可以尝试我的.NET包装器用于FFMpeg:Video Converter for .NET(我是这个库的作者).它将FFMpeg.exe嵌入到DLL中以便于部署,并且不会破坏GPL规则(FFMpeg未链接,并且包装器在与System.Diagnostics.Process的单独进程中调用它).


Tom*_*uda 5

你可以使用这个nuget包:

Install-Package Xabe.FFmpeg
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用易于使用的跨平台FFmpeg包装器.

您可以在Xabe.FFmpeg找到更多相关信息

更多信息在文档中

转换很简单:

IConversionResult result = await Conversion.ToMp4(Resources.MkvWithAudio, output).Start();
Run Code Online (Sandbox Code Playgroud)