1
soclearn 2022-10-13 23:59:28 +08:00
bash cpulimit
|
2
1054850490 OP @minlearn #1 我这是 Windows 环境,包括脚本运行的环境也是 powershell
|
3
xmumiffy 2022-10-14 00:20:31 +08:00 via Android
ffmpeg 有参数 threads 没超过总核心数时基本等于用几个核心
|
4
1054850490 OP @xmumiffy #3 是有,但是嘛,它并不灵活,它在运行中就不能更改,我想我睡觉的时候放开限制,而我使用的时候再限制个数
|
5
mikewang 2022-10-14 00:50:38 +08:00
start /affinity 1 ffmpeg.exe *************
|
6
1054850490 OP @mikewang #5 好像也不适合我,你这个也是开始就写死的,不能在程序运行的途中进行更改
|
7
cxtrinityy 2022-10-14 01:31:53 +08:00 via Android
Powershell 也可以安装到 Linux 吧,wsl 走起,用一楼的 cpulimit 方案试试
|
8
wevsty 2022-10-14 01:33:45 +08:00
POWERSHELL:
ForEach($PROCESS in GET-PROCESS ffmpeg) { $PROCESS.ProcessorAffinity=1} |
9
wangyuyang3 2022-10-14 01:49:51 +08:00 via Android
之前我为了指定 VMware 虚拟机调用的 cpu 内核,用了 process lasso 这款软件,实测可以永久记住规则,即使虚拟机进程结束重开。
你搞个破解版先试试看 |
10
wangyuyang3 2022-10-14 01:50:19 +08:00 via Android
@wangyuyang3 呸,不是内核,是核心数
|
11
wangritian 2022-10-14 02:32:52 +08:00
试试 process lasso
|
12
AX5N 2022-10-14 05:18:46 +08:00
切成 N 片,然后再写一个程序判断你当前是否活动,活动的话下一个任务就低负载,不活动下一个任务就高负载,任务完成后再合并。
|
13
charlie21 2022-10-14 05:29:06 +08:00 via iPhone
可转码速度也会因此变慢
|
14
necomancer 2022-10-14 05:51:23 +08:00 1
任务管理器找到 ffmpeg 然后设置低优先级?
|
15
cnbatch 2022-10-14 06:13:46 +08:00
换个思路,将 ffmpeg 进程的优先级设置到最低,也许这样更简单一些
Get-WmiObject Win32_process -filter 'name = "ffmpeg.exe"' | foreach-object { $_.SetPriority(64) } 加到脚本最后一行 |
17
ysc3839 2022-10-14 07:32:37 +08:00 via Android
正确做法是用 Job Object 限制
https://learn.microsoft.com/en-us/windows/win32/procthread/job-objects#job-limits-and-notifications 不过问题在于可能没有现成的工具,需要自己写代码。 除此之外较好的做法就是设置 CPU 亲和性了,8 楼的方法应该没啥问题。 |
18
zcf0508 2022-10-14 07:44:46 +08:00 via Android
process lasso pro
|
20
tqyq88 2022-10-14 08:51:56 +08:00
使用 cuda 加速,实测大概是 CPU 的几倍,参考 https://trac.ffmpeg.org/wiki/HWAccelIntro
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i test.mp4 -b 1000000 -c:v h264_nvenc -preset slow c2.mp4 |
21
cheng6563 2022-10-14 09:14:00 +08:00
process lasso pro
|
22
zictos 2022-10-14 09:21:26 +08:00 via Android
cmd 命令就可以限制了,有些比较占 cpu 的软件我都是当软件切换到后台就限制只使用 cpu 的一个核心,切换到前台就使用所有核心
|
24
dog82 2022-10-14 10:54:11 +08:00
可以考虑用虚拟机解决
|
25
dog82 2022-10-14 10:57:44 +08:00
或者让 ffmpeg 跑在 docker 里
|
26
lookStupiToForce 2022-10-14 11:22:21 +08:00
process lasso
https://store.lizhi.io/site/products/id/208 |
27
ch2 2022-10-14 12:20:27 +08:00
比较 modern 的办法是装 windows container ,然后用 docker 来限制使用量。
https://learn.microsoft.com/zh-cn/virtualization/windowscontainers/manage-containers/container-base-images https://dockermsft.azureedge.net/dockercontainer/DockerMsftIndex.json |
28
mxT52CRuqR6o5 2022-10-14 12:30:56 +08:00 via Android
用 start 命令启动 ffmpeg 时设置低优先级,全设置低优先级就行了,你不用电脑的时候没有其他程序抢占资源就能跑满了
|
29
mxT52CRuqR6o5 2022-10-14 12:31:34 +08:00 via Android
start /low /wait
|
31
1054850490 OP |
32
1054850490 OP |
33
1054850490 OP |
34
ysc3839 2022-10-14 17:57:34 +08:00
@1054850490 所以说正确的做法是用 Job Object ,把进程加入 Job Object 后子进程都会在 Job Object 内,都会受到限制.
https://github.com/goldshtn/jobrun 可以看看这个项目,不过似乎没有提供编译好的文件。 |
35
wangyuyang3 2022-10-14 18:03:34 +08:00
@1054850490 不是让你用虚拟机 hhh ,我是说 Process Lasso 可以实现和任务管理器类似的进程关联 CPU 调度设置,而且进程重启会一直记住这个规则,不用重新反复设置。
|
36
jeeyong 2022-10-14 18:56:41 +08:00 1
直接设置 cpu 相关性不行吗?
|
38
hxy100 2022-10-15 03:07:49 +08:00
Windows 下有个开源的工具叫“Battle Encoder Shirase”(简称 BES ),支持监视尚未运行的进程、监视已经运行结束退出进程,支持以指定限制率运行指定进程,有 GUI 版本,同时也支持命令行调用,完全满足你的需求。
--- 官网: https://mion.yosei.fi/BES/ --- |
39
mscsky 2022-10-15 22:21:00 +08:00
windows 上的 git 不是带 bash 环境?
|