如何限制FFMpeg CPU使用率?

Mer*_*inç 16 c# ffmpeg

我在C#Windows窗体应用程序中调用FFMpeg.由于它使用了这么多的CPU(总是超过90%),我的线程都无法继续工作.有没有办法限制这种CPU使用率?

我试图将Process.PriorityClass设置为PriorityClass.BelowNormal,但这完全阻止了ffmpeg进程.

我确信有一种方法可以做到这一点,因为我看到很多程序都使用ffmpeg.

请帮忙.

Jes*_*sen 21

您不能将FFMpeg限制为CPU使用百分比,但您可以-threads在FFMpeg调用上设置参数,如果您有4个核心,请尝试将其设置为-threads 2应将CPU限制在50%左右.

另一种解决方案可能是将FFMpeg进程的优先级降低到低于应用程序的优先级.

  • @Mert,是的,对于没有超线程的单核CPU,降低优先级将是最佳选择.媒体编码是一项CPU密集型任务,如果您正在寻找任何类型的可扩展性,您应该考虑不在与应用程序相同的计算机上运行FFMpeg,在这种情况下,客户端/服务器解决方案可能是您可能希望查看的内容.我希望它能回答你的问题. (2认同)
  • 这确实不是最好的答案,因为有些编解码器(例如 x265 编码)会使用更多的 CPU 功率,即使设置 -threads 1 也是如此。它们不会将 ffmpeg 设置转换为实际的线程数,它们只是使用它作为指导方针。 (2认同)

小智 18

仅适用于试图找到在终端(bash、zsh 或服务器上)中使用的解决方案的人......

nice -n 20 cpulimit -l 60 -i ffmpeg -threads 1 -i in.avi out.mp4

nice是用于设置优先级的程序。阅读man nice以了解-n参数在您的系统中的含义。在 macOS 上,20 最低,-20 最高。

cpulimit是用于控制 CPU 使用率的开源实用程序(Linux/OS X/FreeBSD)。

在 MacOS 上,这需要 sudo。