我最近开始使用HandBrake处理我下载的一些视频,以使其更轻便。我使用CLI版本构建了一个小的python GUI程序来自动化处理。我正在做的是根据视频生成命令并使用os.system执行它。像这样的东西:
import os
def process(args):
#some algorithm to generate cmd using args
cmd = "handbrakecli -i raw_video.mp4 -o video.mp4 -O -e x264" #example command
os.system(cmd)
os.remove("raw_video.mp4")
该代码可以正常工作,但是问题是我的CPU过度使用了。通常,这会在相当长的时间内占用100%CPU的使用率。我使用CoreTemp程序跟踪处理器温度,通常会达到78°C。
[通过将cmd命令保存到名为exec.bat的批处理文件中并执行BES,我尝试使用os.system("BES_1.7.7\BES.exe -J -m exec.exe 20")
(Battle Encoder Shirase),但是这根本不起作用。
速度一点都不重要。即使花费更长的时间,我也只想使用更少的CPU,大约50%的内存就可以了。关于我该怎么做的任何想法?
在手刹中,您可以传递高级参数,因此您仅使用一定数量的CPU线程。
您可以使用threads
,查看Handbrake CLI Documentation
使用threads
时,您可以指定要使用的任何数量的CPU处理器。默认值为auto
。
-x
参数代表Handbrake的GUI中的“高级”设置,也就是threads
所在的位置。
下面告诉Handbrake高级设置只使用一个CPU线程:
-x threads=1
您还可以将veryslow
用于--encoder-preset
设置,以帮助CPU加载。
--encoder-preset=veryslow
我实际上更喜欢使用--encoder-preset=veryslow
预设,因为我看到编码的整体质量更好。
并且一起:
--encoder-preset=veryslow -x threads=1
使用cmd
变量格式化:
cmd = "handbrakecli -i raw_video.mp4 -o video.mp4 -O -e x264 --encoder-preset=veryslow -x threads=1" #example command
看看是否有帮助。