Search code examples
handbrake

How to make handbrake use the cpu with less intensity?


I've recently began using HandBrake to process some videos I downloaded to make them lighter. I built a small python GUI program to automate the processing, making use of the CLI version. What I am doing is generating the command according to the video and executing it with os.system. Something like this:

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")

The code works perfectly, but the problem is the overuse of my CPU. Usually, this takes 100% of CPU usage during considerable amount of time. I use the program CoreTemp to keep track of my processor temperature and, usually, it hits 78 °C.

I tried using BES (Battle Encoder Shirase) by saving the cmd command into a batch file called exec.bat and doing os.system("BES_1.7.7\BES.exe -J -m exec.exe 20"), but this simply does nothing.

Speed isn't important at all. Even if it takes longer, I just want to use less of my CPU, something around 50% would be great. Any idea on how I could do so?


Solution

  • In Handbrake you can pass advanced parameters so you only use a certain amount of CPU threads.

    You can use threads, view the Handbrake CLI Documentation

    When using threads you can specify any number of CPU processors to use. The default is auto.

    The -x parameter stands for Advanced settings in the GUI of Handbrake, that is where threads will go.

    The below tells Handbrake to only use one CPU thread for the Advanced setting:

     -x threads=1
    

    You can also use the veryslow for the --encoder-preset setting to help the CPU load.

    --encoder-preset=veryslow
    

    I actually prefer using the --encoder-preset=veryslow preset since I see an overall better quality in the encode.

    And both together:

    --encoder-preset=veryslow -x threads=1
    

    So formatted with your cmd variable:

    cmd = "handbrakecli -i raw_video.mp4 -o video.mp4 -O -e x264 --encoder-preset=veryslow -x threads=1" #example command
    

    See if that helps.