handbrake - 如何使手刹使用强度较小的cpu?
问题描述
我最近开始使用 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 的批处理文件中来使用BESos.system("BES_1.7.7\BES.exe -J -m exec.exe 20")
(Battle Encoder Shirase) ,但这根本没有任何作用。
速度根本不重要。即使需要更长的时间,我只想使用更少的 CPU,大约 50% 会很棒。知道我该怎么做吗?
解决方案
在 Handbrake 中,您可以传递高级参数,因此您只使用一定数量的 CPU 线程。
您可以使用threads
,查看Handbrake CLI 文档
使用时,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
看看是否有帮助。
推荐阅读
- c# - 如何将自定义属性添加到 IdentityServer4 PersistedGrantStore
- c++ - 以基类作为数据成员的派生类?
- identityserver4 - 是否可以调用 IdentityServer4 API 来发布令牌?
- bash - 要求输入 bash 脚本的命令
- android - Android Studio 编辑器在更新到 3.5 后看不到数据绑定引用
- java - Spring Boot 1.5 禁用 oauth2 安全性
- go - 使用反射设置作为指针的结构字段
- javascript - 如何使用 javascript 在浏览器中检索 keberos 票证
- c# - 在 RDLC 报告 FromDate 到 ToDate 中搜索记录
- sql - 向 SQL Server 用户授予执行权限以仅运行特定作业