Batch transcode a folder of videos with Handbrake's CLI
I've used Handbrake for years, to transcode practically any video file—including ripped DVDs and Blu-Rays—so I can watch the videos on practically any device. It's especially helpful for .mkv files, which can have a hodgepodge of video formats inside, and are notoriously difficult to play back, especially on older or more locked down playback devices.
But Handbrake's achilles heel, as a GUI-first application, is in a lack of easy batch operation. You can queue videos up one at a time, which is nice, but more recently, as I've ripped more TV seasons onto my NAS, I've wanted to transcode 5, 10, or 20 files at a time.
2026 Update: I've since noticed an option File > Add Titles to Queue... (Shift + Command + B), or you can click the dropdown next to 'Add To Queue' and select "Add All Titles To Queue". I'm not sure if the options were always there or not, but it seems like that's an easy enough way to do this in the GUI.
Enter HandBrakeCLI. Assuming you're on a Mac and installed Handbrake already (e.g. with brew install --cask handbrake), download HandBrakeCLI, mount the downloaded disk image, and copy the executable into a system path:
sudo cp /Volumes/HandBrakeCLI-1.5.1/HandBrakeCLI /usr/local/bin/
Then you can use it to loop over an entire directory—even recursively—and transcode all the video files within.
Here's a very tiny bash script I use to do just that, converting any file that ends in .mkv to an MP4 using the General/HQ 1080p30 Surround preset:
Let that run for a while, and you can transcode an entire TV series in one go.
Comments