我正在尝试提供一个像 Youtube 一样运行的网站。为我的用户提供一种便利,让他们通过 FFMPEG 在我的服务器上以多比特率上传视频。但是当 FFMPEG 从单个视频制作多比特率视频文件时,服务器 CPU 使用率会达到最大值。这意味着即使我使用市场上最强大的 CPU,也只有少数人可以上传他们的视频。所以请告诉我如何在 FFMPEG 制作多比特率视频时降低 CPU 使用率。
答案1
最简单的答案是,如果您使用 Linux 或类似系统,请nice
在启动 ffmpeg 时使用该命令。
您可以将其nice
与任何标准命令一起使用,它会调整命令的 CPU 优先级。
因此,如果你目前正在使用
ffmpeg -i uploaded.mpg -vcodec copy out1.mpg
(显然,除了更有趣的论点),你可以这样做
nice ffmpeg -i uploaded.mpg -vcodec copy out1.mpg
。
编辑:我看到你正在使用Windows 服务器 2008。
在 Windows 上,该命令的替代方法nice
是使用START
带有选项的命令。
这个页面值得一读:http://technet.microsoft.com/en-us/library/cc770297.aspx
因此你可以使用类似如下的方法:
start /wait /low /b ffmpeg [your arguments here]
/wait
表示在最后启动命令,并等待其完成。否则它将启动 ffmpeg 并立即返回 - 如果您已经构建了这样的循环,则可能会启动 ffmpeg 的另一个副本来创建替代比特率。/low
是说以低优先级运行该进程/b
意味着不要打开命令提示符窗口,因为您的服务器上不需要它。
但
这些可能不是最佳答案。最佳答案是在另一台(或多台)服务器上进行视频处理。您需要共享数据库和磁盘存储。当有人上传视频时,需要将其标记为转换。然后您的渲染农场可以逐一挑选渲染任务,保存到磁盘并使用可用的比特率更新数据库。
像这样分离渲染有两个优点:
- 这意味着你的网络服务器不会因处理视频而陷入困境,因此仍能响应用户
- 如果您愿意,可以添加更多服务器来进行渲染(或使用云服务)。
但这需要大量工作。