![是否可以调整这些 FFmpeg 设置,使其尽可能节省 CPU](https://linux22.com/image/1583129/%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E8%B0%83%E6%95%B4%E8%BF%99%E4%BA%9B%20FFmpeg%20%E8%AE%BE%E7%BD%AE%EF%BC%8C%E4%BD%BF%E5%85%B6%E5%B0%BD%E5%8F%AF%E8%83%BD%E8%8A%82%E7%9C%81%20CPU.png)
ffmpeg -i https://NESTCAMURL -vf drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf:text='%{localtime\:%T}':[email protected]:x=7:y=700 -vcodec libx264 -bsf:a aac_adtstoasc /home/owner/Downloads/Move/NEST/Livingroom/StreamLivingroom_$now.mp4"
上述命令似乎会耗尽 CPU 的资源,理想情况下,我希望它使用尽可能少的资源,同时仍能实现不错的视频质量。这可能吗?
答案1
“在实现不错的视频质量的同时尽可能少地使用资源”就像说尽可能少用燃料,但要开得足够远。效率是无法改变的,你需要决定你愿意放弃多少质量。你可以通过设置 x264 预设来做出权衡。
编辑:尝试添加,但-crf 18 -preset ultrafast
成本会增加文件大小。
答案2
“上述命令似乎使 CPU 达到了最大限度,理想情况下,我希望它使用尽可能少的资源,同时仍然实现不错的视频质量。”
你的逻辑问题在于,你认为 FFmpeg 的内部设置是罪魁祸首,但事实并非如此……好吧,不完全是,但为了简单明了,我会说几乎任何 Linux/Unix 系统软件都可以被控制,以限制使用该工具CPU限制:
CPU限制是一个简单的程序,它试图限制进程的 CPU 使用率(表示为百分比,而不是 CPU 时间)。当您不希望批处理作业占用过多 CPU 时,这很有用。它不会对 nice 值或其他调度优先级起作用,而是对真实的CPU 使用率。此外,它能够动态、快速地适应整个系统负载。
因此,在最基本的层面上,您可以使用 CPUlimit 的-l
命令运行您的命令,如下所示:
cpulimit -l 50 ffmpeg -i https://NESTCAMURL -vf drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf:text='%{localtime\:%T}':[email protected]:x=7:y=700 -vcodec libx264 -bsf:a aac_adtstoasc /home/owner/Downloads/Move/NEST/Livingroom/StreamLivingroom_$now.mp4"
这cpulimit -l 50
告诉系统仅使用 50% 的 CPU 能力,因此您的进程将花费 2 倍的时间,但也仅使用 50% 的 CPU 资源。
但请记住,4 核系统(例如我现在使用的 MacBook Air)相当于 400%(4 x 100%)。因此,如果我想仅使用系统可用容量的 50%,则需要-l
以 200% 的容量运行标志,如下所示:cpulimit -l 200
。
cpulimit -l 200 ffmpeg -i https://NESTCAMURL -vf drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf:text='%{localtime\:%T}':[email protected]:x=7:y=700 -vcodec libx264 -bsf:a aac_adtstoasc /home/owner/Downloads/Move/NEST/Livingroom/StreamLivingroom_$now.mp4"
有关详细信息,请参阅这篇很棒的博客文章。