And*_*lov 16 command-line video ffmpeg
我使用 FFmpeg 从 Xvfb 显示器制作视频屏幕截图。
目前我调用它:
ffmpeg -y -r 15 -g 600 -s 1280x1024x24 -f x11grab -i :100 -vcodec libx264 /tmp/video.mov
Run Code Online (Sandbox Code Playgroud)
当我从大约 5 个 Xvfb 会话中录制视频时,我的 CPU 使用率非常高,因此会出现延迟。此外,每个 ffmpeg 进程的内存使用量约为 300 MB。
在制作视频屏幕截图时,我应该使用 ffmpeg 的哪些参数来最小化计算机资源的使用(特别是 CPU 和内存)?
llo*_*gan 18
ffmpeg -y -framerate 25 -video_size 1280x1024 -f x11grab -i :0.0 -c:v libx264rgb \
-crf 0 -preset ultrafast temp.mp4
Run Code Online (Sandbox Code Playgroud)
输入是 RGB,因此使用编码器 libx264rgb 将避免使用普通 libx264 时可能发生的 RGB 到 YUV 的潜在缓慢转换。
这使用最快的 x264 编码预设:超快。
输出将是无损的,因为-crf 0被使用。
第一个命令的输出会很大,而且大多数愚蠢的玩家无法处理 RGB H.264,因此您可以重新编码它:
ffmpeg -i temp.mp4 -c:v libx264 -crf 23 -preset medium -vf format=yuv420p out.mp4
Run Code Online (Sandbox Code Playgroud)
您可以尝试使用该-crf值来控制输出质量。主观上理智的范围是 18-28,其中 18 是视觉无损或几乎无损。默认值为 23。
使用您有耐心的最慢预设:ultrafast、superfast、veryfast、faster、fast、medium、slow、slower、veryslow。默认为medium。
我添加-vf format=yuv420p以确保输出适用于 QuickTime 和 Windows Media Player 等愚蠢的播放器。如果您将其上传到 YouTube 或仅在 VLC、mpv、MPlayer 或任何其他基于 FFmpeg 的播放器上播放,则可以省略此设置。
最好集中精力使用不同的 ffmpeg 选项,以使用更少的资源实现相同的结果。也就是说,如果您确实需要使用 ffmpeg 完成特定的事情并且它使用了太多资源,则可以通过多种方法来使用更少的资源。
ffmpeg您可以降低CPU 进程的优先级:
nice命令改变进程的优先级:nice -n 8 ffmpeg -y -r 15 -g 600 -s 1280x1024x24 -f x11grab -i :100 -vcodec libx264 /tmp/video.mov。在Linux中,优先级数字(nice命令格式为nice -n <priority> <command>)范围为-20到20。整数越大,优先级越低;中性是0。如果你使用我给你的命令并将其设置为8,CPU会给进程更少的时间,这看起来像是更少的“权力”。如果这个数字太高或者太低了两点,当然你可以改变它。ffmpeg,打开系统监视器。向下滚动到名为 的进程ffmpeg,左键单击它进行选择,右键单击它,并将优先级设置为“低”或“非常低”。如果您也担心内存使用情况,请知道不可能告诉进程只占用这么多内存并仍然运行。内核自动控制进程的内存分配。有一种方法可以使用timeoutscript来限制进程,以便当进程和任何子进程占用过多内存(由您设置的限制)时,它们会被安全终止并显示通知。然而,如果一个进程只获得了这么多内存(比如由内核提供),并且它请求了更多它无法拥有的内存,那么它就会崩溃。
一些需要了解的有用的事情:
利用 Cgroup 的知识,您可以做很多有趣的事情,例如控制进程的交换性。