Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#和FFmpeg最好没有shell命令?_C#_Ffmpeg - Fatal编程技术网

C#和FFmpeg最好没有shell命令?

C#和FFmpeg最好没有shell命令?,c#,ffmpeg,C#,Ffmpeg,我希望能够使用FFmpeg从我的C#程序中转换视频文件。我知道我可以调用shell命令,但是有更好的方法吗 通过shell调用命令的问题是,我不确定您是否可以执行进度条之类的操作。。。或者你可以吗 如果没有办法的话,有谁能建议最好的方法来布局一些框架来执行shell命令呢。传递一个大的长字符串非常麻烦。在FFmpeg for.NET上有一个库。围绕FFmpeg的本机接口编写一个C++/CLI包装器,然后从应用程序调用包装器接口如何?如果运行FFmpeg,您可以轻松实现一个进度条。运行时ffmpe

我希望能够使用FFmpeg从我的C#程序中转换视频文件。我知道我可以调用shell命令,但是有更好的方法吗

通过shell调用命令的问题是,我不确定您是否可以执行进度条之类的操作。。。或者你可以吗


如果没有办法的话,有谁能建议最好的方法来布局一些框架来执行shell命令呢。传递一个大的长字符串非常麻烦。

在FFmpeg for.NET上有一个库。

围绕FFmpeg的本机接口编写一个C++/CLI包装器,然后从应用程序调用包装器接口如何?

如果运行FFmpeg,您可以轻松实现一个进度条。运行时ffmpeg的输出类似于:

frame= 3366 fps=465 q=31.0 Lsize=    6474kB time=140.35 bitrate= 377.9kbits/s
每秒刷新两次。您可以解析该行并获取显示进度所需的数据。当您在命令行中运行时,您只会看到一行一直在更新,但ffmpeg所做的是将该行写入后面的\r\n行。这就是为什么你看不到多行。但是,当对程序的错误输出使用StreamReader.ReadLine()时,每次更新都会得到一行

下面是读取输出的示例代码。您必须忽略任何不以“frame”开头的行,如果您希望读取的行是异步的,可以使用+等等,但您明白了这一点(我已经对其进行了实际测试):


我刚在sourceforge找到。看起来很有希望,但是我没有用过。

我在几周前找到了这篇文章,当时我正在寻找问题的答案。 我试图启动ffmpeg进程并向其传递参数,但这一切都需要很长时间。在这一点上,我使用as-it来完成这项工作,不必担心ffmpeg可执行文件,因为它具有下载最新版本的功能

bool conversionResult = await new Conversion().SetInput(Resources.MkvWithAudio)
  .AddParameter(String.Format("-f image2pipe -i pipe:.bmp -maxrate {0}k -r {1} -an -y {2}",bitrate, fps, outputfilename))
  .Start();

现有文档显示了如何获得当前的转换百分比。

“目前音频解码和编码已经成熟,视频功能正在开发中(我们目前有视频解码功能,但还没有同步音频)。”我需要音频正常工作。不幸的是,自2年前的上述评论以来,该项目尚未更新。没有二元分布;你必须检查代码并自己构建。有人吗?拜托,一定有人用过ffmpeg和.netah。。。我一直在尝试重定向到standardOutput。。。不是错误。它突然起作用了:P+1:我用Java做了同样的事情,我对结果非常非常满意。不过也有一些捕获:比如
time
值,在第一次更新的进度线输出中可能是100000000。我的直觉说这是一个内部初始化值。可能是的。只需使用谓词语句来消除超出某个合理范围的值。脏,但它会工作的VC编译器不支持ffmpeg中使用的许多C语言结构。ffmpeg团队希望看到有人成功地将代码移植到VC。
bool conversionResult = await new Conversion().SetInput(Resources.MkvWithAudio)
  .AddParameter(String.Format("-f image2pipe -i pipe:.bmp -maxrate {0}k -r {1} -an -y {2}",bitrate, fps, outputfilename))
  .Start();