Page 1 of 1

Batch script to convert all ?

Posted: Fri Aug 14, 2020 12:15 pm
by theUnknown
Hello,

I am looking for some help to convert all my mp4 in a folder and it's subfolders to mkv . Converted files should be in the same folder and preset should be H.264 720p.

I tried GUI but it's very time consuming as I have thousands of video source folder.

Thanks in advance.

Re: Batch script to convert all ?

Posted: Fri Aug 14, 2020 12:16 pm
by theUnknown
Btw I use MacBook.

Re: Batch script to convert all ?

Posted: Sat Aug 15, 2020 12:23 pm
by theUnknown
This app solved my problem if anyone interested.
http://hbbatchbeast.io

Terrible --- Batch Folder is broken

Posted: Wed Sep 30, 2020 7:02 pm
by indiedoroid
It doesn't work. I select the folder, but handbrake still just converts 1 file.

Thank you for the free software... but it's really frustrating to use. I have 1000 videos to convert... I have to drag in one by one ...

Re: Batch script to convert all ?

Posted: Wed Sep 30, 2020 10:13 pm
by Woodstock
You're looking in the wrong section if you're expecting the command line version to do "batch conversion" without scripting.

Typically, when someone raises this lament about the GRAPHIC user interface, the issue is found by looking at Tools->Preferences->Output Files, and finding that they have a template that automatically give the same output file name for every input file, so only the last one remains.

What are you using on that page?

Re: Terrible --- Batch Folder is broken

Posted: Tue Nov 24, 2020 11:11 am
by LuisC
indiedoroid wrote: Wed Sep 30, 2020 7:02 pm It doesn't work. I select the folder, but handbrake still just converts 1 file.

Thank you for the free software... but it's really frustrating to use. I have 1000 videos to convert... I have to drag in one by one ...
Yes that's the biggest drawback of this compressor. Very good by the way. But the fact you have to add every single video clip one by one to the queue really sucks.
I have no clue about coding, so I don't know how difficult it would to make that batch conversion (all files in a folder) happen.
Thanks to developers for the effort
Mac version 1.3.3 by the way

Re: Batch script to convert all ?

Posted: Tue Nov 24, 2020 3:22 pm
by Woodstock
Handbrake can be automated, but it does take some effort on the user's part.

For the GUI, you have to have your output file template configured to make unique file names for each input file. That isn't really that hard.

For the CLI, your batch script will have to list all the files you want to process, or pick that information up from the directory you're trying to convert. The CLI expects ONE input file on the command line, with a corresponding output file. You can select a preset to handle most of the other parameters, or detail them on each line of the script.

The CLI can do things that the GUI does not allow you to do, but it also requires more knowledge to make it happen.

Re: Batch script to convert all ?

Posted: Tue Nov 24, 2020 5:49 pm
by mduell
Use HBBatchBeast, a third party GUI for batch encoding with HB as the backend.

Re: Batch script to convert all ?

Posted: Sat Apr 03, 2021 4:16 pm
by xochipilli
As he asked for a bash script ...

You're welcome to cannibalise my one - doesn't do exactly what you want, but it's easy to look at the HandBrakeCLI man page and change up the params. Note the use of audio passthrough for friendly audio types and re-encode for unfriendly.

run with e.g. enc_dir.sh ./ 26 to run on current directory with qp of 26 .. it will convert anly media types it recognises and you may need to add new file extensions. If you stop it .. simply re-run and it will continue from where it left off with no need to worry about deleting partial encodes (it encodes into the tmp dir and moves them on completion .. make sure it's big enough... or change where it is!). Note QP should be higher for higher resolution .. and this isn't automated. Currently the script stops if handbrake fails so you know which file is causing problems .. but you could easily use mediainfo from the script to check the ouput is valid (length / res / etc.) and/or simply remove the exit command and re-run the script to check if all files are encoded (it should do nothing if they are).

I don't advise encoding into the same directory or overwritting the originals as you're asking for confusion / mistakes as it's not uncommon for something not to work well or audio / subs to go missing .. especially if they are poorly supported.

Code: Select all

#!/bin/bash
set -e
set -x

mkdir -p x265

DIRN=$(dirname '"$1"')
if [ -n $DIRN ]; then
  DIRN="${DIRN}/"
fi;

for fname in ${1}/*; do
    filename=$(basename "$fname")
    FNAME="${filename%.*}"
    EXTIN="${filename##*.}"
    EXTOUT=".mkv"
    OUTFNAME="${FNAME}${EXTOUT}"
    
    case ${EXTIN} in
        mkv|mp4|m4v|avi|flv)
            if [ -f "${DIRN}x265/${OUTFNAME}" ]; then
                echo "Skipping ${filename} as already in x265 directory"
            else
                if [ -f "${DIRN}${filename}" ]; then

                    echo "Converting ${filename} to ${FNAME}${EXTOUT} in directory ${DIRN}"
        # --audio-lang-list "jpn,eng,und"   --audio-lang-list="jpn"
                    # --subtitle-lang-list eng --subtitle-default=1
                    #  --all-subtitles --subtitle-default=1 -e x265_10bit
                    # --encoder-tune animation 
                    nice -n 0 HandBrakeCLI -i "${DIRN}${filename}" -o "/tmp/${OUTFNAME}" -e x265 --encoder-preset slow -q $2 --vfr --crop 0:0:0:0 --no-loose-crop -x "pools=20:weightb=1:force-cqp=1" --first-audio --aencoder copy --audio-copy-mask aac,ac3 --audio-fallback fdk_aac --mixdown none --no-comb-detect --no-deinterlace --no-decomb --no-detelecine --no-hqdn3d --no-nlmeans --no-chroma-smooth --no-unsharp --verbose=10  --all-subtitles --subtitle-default=1 --no-markers
                    
                    echo "exitval=${exitval}"
                    if [ $? -eq 0 ]
                    then
                        echo "Success .. moving from tmp to x265 dir"
                        mv "/tmp/${OUTFNAME}" "${DIRN}x265/"
                    else
                        echo "Failure in handbrake .. exiting"
                        exit 1
                    fi
                fi
            fi;;
    esac
done