我有一个项目(ASP.NET Core,在 Linux 上),其中有几个任务,与视频转换和从视频文件中提取帧有关。
我考虑了两种可能的选择:
ffmpeg
控制台实用程序P/Invoke
与 libavcodec
库和其他库一起使用,ffmpeg
使用第二个选择更加困难,并且可能非常不切实际,因为它提醒我开发新的包装器/库,而不是使用现成的产品。
我已经进行了谷歌搜索,但没有针对 Linux 平台上的 C#/ASP.NET Core 的完善项目。其中一些适用于 C++ 和 Python,但不适用于 Linux/.NET Core 上的 C#。
我决定考虑第一个选项,我认为它会更容易和实用。但是,也有一些薄弱的地方,可能会产生很多问题。我们理解(我想),使用第一个选项,最终开发人员应使用流程分叉。因此,可能存在进程空闲的问题和其他可能的问题...我问你的做法,因为这是我第一次在Linux平台上使用C#进行视频转换/采样的经验。我已经在 Windows 平台上使用了
Expression Encoder .NET 库,但这是另一回事了,现在没有任何意义。
也许还有其他选择,但我目前看不到。我不喜欢第一个选项,因为可能会出现未处理的异常,因为具有这样的角色的ffmpeg
成为 ASP.NET Core 后端的黑匣子。
FFMPEG
创建了自己的最小包装器 FFmpeg.AutoGen
。包装器在 Linux 上运行良好,但这种方式需要更多时间来理解 FFMPEG
库如何工作不久前为了测试,我也通过
new Process()
创建了你的第一个选择。这种方式的伟大之处在于简单
Process process = new Process();
process.StartInfo.FileName = "ffmpeg.exe";
process.StartInfo.Arguments = "example arguments";
process.Start();
你需要自己决定,但请记住 - 在 C# 中调用 C 函数是一件了不起的事情