C#中的Process.Start()比控制台慢

6

我希望制作一个用于解析ffmpeg输出的程序。但当仅通过命令行运行ffmpeg时,输出是以文本形式呈现的。

strCmdText = "-y -i \"" + path + "\"";
strCmdText += " -async 1 -vf yadif -c:v libx264 -b:v 1024k -r 30 -bf 1 -an nul.avi";
Process.Start(new ProcessStartInfo("lib\\ffmpeg.exe", strCmdText));

相较于批处理启动,它的速度慢了2/3:

set FFMPEG="ffmpeg\ffmpeg.exe"
%FFMPEG% -y -i %1 -async 1 -vf yadif -c:v libx264 -b:v 1024k -r 30 -bf 1 -an -pass 1 nul.avi

在C#中运行时,它的fps率为130(CPU:100%),但使用批处理运行时,它有400 fps(CPU 75%)。

无论哪种方式,RAM使用情况都相同,#Handels和#Threads也是如此。 将进程优先级设置为High / Live也无法解决此问题,也不能在单独的线程中运行进程。

这是正常的吗? 还是可以解决?


你(或其他人)是否为你的起始进程(或任何其父进程)定义了处理器亲和性?使用进程监视器查找是否存在这种情况。仅以75%运行可能表明该进程仅使用可用核心的3/4。 - Dirk Vollmar
3
你似乎将不同的参数传递到了位于不同位置的可执行文件中。你可以再次确认参数是否完全相同,并且你使用的可执行文件是否完全相同吗? - oleksii
1个回答

4
当您使用Process.Start启动应用程序时,命令提示符中缺少一个-pass 1开关,可能会影响输出结果。
据我所知,通过Process.Start启动的应用程序的速度和输出与正常情况下启动的应用程序相同。
性能可能会有1%或2%的变化,但这主要是由于CPU、进程亲和性和与硬件相关的事项。

怪我了,你是对的。我刚才错过了它。 现在帧率几乎相同。 谢谢。 - gu471

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接