预设需先在 HandBrake 桌面版导出为 .json 再通过网页上传;启用 GPU 硬件编码需额外配置,且目前仅支持 Intel QSV 和 NVIDIA NVENC;server 与 worker 挂载的媒体路径必须保持一致,默认端口为 9999。
handbrake-web
TheNickOfTimeAGPL-3.0更新放缓在无头设备上通过网页界面运行 HandBrake 转码,还能把多台机器的算力汇入同一个任务队列,适合自建视频转码集群。
A self-hosted platform to use HandBrake on your headless devices via a bespoke web interface. Harness the processing power of multiple devices to work on a single queue.
docker compose up -dserver 端计算量小,可跑在低功耗设备上;worker 端计算密集,建议每台机器只跑一个 worker,且需高核心数 CPU 或可用的 GPU 硬件编码。README 未给出具体显存要求。
自托管的 HandBrake 网页前端,把多台无头设备的算力汇入同一个转码队列
在无头设备上通过网页界面运行 HandBrake 转码,还能把多台机器的算力汇入同一个任务队列,适合自建视频转码集群。
核心能力
- 用浏览器在无头设备上操作 HandBrakeCLI 转码
- server 只做调度,worker 用 HandBrakeCLI 执行重活
- 多 worker 分布式并发处理同一任务队列
- 目录 Watcher 按条件自动创建转码任务
- 支持 Intel QSV 与 NVIDIA NVENC 硬件编码
容易踩的坑
- v0.8.1最新正式版2025-12-10 · 2025-12-10 20:08 UTC
Featured Changes
Fixes
- Fixed an issue preventing workers on ARM from starting properly.
All Changes
- docs: update readme to display a screenshot outside of the collapsed section by @TheNickOfTime in https://github.com/TheNickOfTime/handbrake-web/pull/580
- fix: worker startup crash by skip checking hardware capabilities on arm by @TheNickOfTime in https://github.com/TheNickOfTime/handbrake-web/pull/583
- fix: current version styling in the sidebar by @TheNickOfTime in https://github.com/TheNickOfTime/handbrake-web/pull/584
- docs: update readme badge for latest development by @TheNickOfTime in https://github.com/TheNickOfTime/handbrake-web/pull/585
- chore: updating package versions to 0.8.1 by @TheNickOfTime in https://github.com/TheNickOfTime/handbrake-web/pull/586
Full Changelog: https://github.com/TheNickOfTime/handbrake-web/compare/v0.8.0...v0.8.1
Support HandBrake Web
HandBrake Web is developed and made available completely for free. If you enjoy using the project, consider supporting the project with a donation
- v0.8.02025-12-09 · 2025-12-09 01:41 UTC
查看更新说明
Long time, no see! After a year (nearly to the date), HandBrake Web v0.8.0 is here!
I'm sorry for how long this took - maintaining a project like this in my limited free time is no easy task, and the past year has been difficult for me in a variety of ways. With apologies out of the way, I am happy to say that this update has a large number of improvements. The primary focus of this update was under-the-hood optimization and bug fixing, so things will not feel "new", but I promise you that this update for the project is the most substantial one so far.
Featured Changes
Overhauled Build Process
The build process for HandBrake Web has been revamped pretty much top to bottom. This comes with a variety of benefits/improvements:
Custom Built HandBrake v1.10.2
Previously, the image build process would simply install HandBrake from Debian's package repository. This was bad for a variety of reasons - HandBrake themselves don't recommend doing this, and even at the time of the last release, the packaged HandBrake v1.6.2 was horrifically out of date.
As of v0.8.0, this project automatically (using Renovate) builds HandBrake from source whenever there is a new release from the HandBrake team. This means that we are shipping with the latest version of HandBrake (v1.10.2 at the time of publishing), and staying on top of future versions will be much easier and faster.
Additionally, the custom build of HandBrake has fewer external dependencies, which has had a great impact on final image size.
Distroless Base Image
The final images for this project now use Google's distroless base images. As a result, our final images only include what is absolutely necessary to run the project. This has a variety of implications, but is mostly impactful to final image size.
Application Bundling
The
serverandworkerapplications are now bundled with esbuild (the client already was previously). Through the magic of dependency tree-shaking, only the code and dependencies that are actually needed are included in the final build. This has a drastic impact on final image size.Final Image Size Reduction
As a result of these build changes, the
serverandworkerimages have gone from1.04 GBand1.29 GBto222 MBand394 MBrespectively.Client Updates
Massive Refactoring
This is the biggest change that you will never notice. Nearly every aspect of the client has been rewritten or refactored, now more closely following best practices (who was the idiot who wrote all this over a year ago?). There is still more work to do here, but for now it means maintaining the client code is immeasurably easier, which means fixing bugs and implementing features should be faster.
Updated Job Creation Dialog
The job creation dialog has been refined both visually and functionally:
- The styling of the dialog has been updated to be more in line with the rest of the application - previously was looking pretty plain/vanilla HTML.
- The order of sections has been revised - you now select the preset you intend to use before anything else.
- File extension selection has been removed and uses the extension provided by the selected preset (how it should have always been)
- ISO images can now be selected as the input file in the File Browser (previously wasn't possible).
Updated Worker Display
The display for worker information has been updated to include a ton more useful and relevant information such as:
- Application Version
- HandBrake Version
- Supported Hardware Capabili
- v0.7.32024-11-27 · 2024-11-27 01:55 UTC
查看更新说明
Featured Changes
Fixes
- Fixed an issue where watchers would use the extension '.mkv' for their output files regardless of what the preset requests.
All Changes
- feat: watchers will get the extension of the preset they are using for naming the output file (#286) by @TheNickOfTime in https://github.com/TheNickOfTime/handbrake-web/pull/287
- feat: updating package versions to 0.7.3 by @TheNickOfTime in https://github.com/TheNickOfTime/handbrake-web/pull/288
Full Changelog: https://github.com/TheNickOfTime/handbrake-web/compare/v0.7.2...v0.7.3
- v0.7.22024-11-15 · 2024-11-15 22:59 UTC
查看更新说明
Featured Changes
Fixes
- Fixed an issue where changing your output extension after selecting your input file would not update the output extension
All Changes
- feat: updating packages and version properties for v0.7.2 by @TheNickOfTime in https://github.com/TheNickOfTime/handbrake-web/pull/251
- fix: the output path does not update when changing the selected extension by @TheNickOfTime in https://github.com/TheNickOfTime/handbrake-web/pull/252
Full Changelog: https://github.com/TheNickOfTime/handbrake-web/compare/v0.7.1...v0.7.2
- v0.7.12024-09-10 · 2024-09-10 18:19 UTC
查看更新说明
Featured Changes
arm64 Platform Support
- You can now run HandBrake Web on your arm powered devices natively!
- Limitations on the arm64 platform:
- No GPU transcoding available
All Changes
- feat: bump the application versions to v0.7.1 across all applications by @TheNickOfTime in https://github.com/TheNickOfTime/handbrake-web/pull/231
- fix: disabling removal of untagged/sha-256 images due to conflicts by @TheNickOfTime in https://github.com/TheNickOfTime/handbrake-web/pull/233
- feat: adding back removal of tagged sha-256 image versions by @TheNickOfTime in https://github.com/TheNickOfTime/handbrake-web/pull/235
- feat: adding arm64 support to docker builds by @TheNickOfTime in https://github.com/TheNickOfTime/handbrake-web/pull/230
Full Changelog: https://github.com/TheNickOfTime/handbrake-web/compare/v0.7.0...v0.7.1
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
Summary
HandBrake Web is a program for interfacing with handbrake across multiple machines via a web browser. It consists of two components: the server and one or more worker(s). Warning - This application is still under heavy development, use at your own risk, to learn more please see the Known Issues & Limitations section.
Server
The server component primarily acts as a coordinator for the workers. Additionally it serves the client interface. The work done by the server is not computationally expensive - it can be run on low-end/low-power devices with no issue.
Worker(s)
The worker component does the heavy lifting via HandBrakeCLI. Jobs are sent to workers by the server, and the workers will process the provided media based on a provided HandBrake preset configuration. The work done by the worker is very computationally expensive - it is recommended that you run a single worker instance per machine, and that machine either have a high core-count CPU or have GPU hardware encoding features available to the worker.
Setup
Setup Guide
See the Setup Guide wiki page for a detailed walkthrough on getting HandBrake Web setup and configured.
Quick Start
If you are very familiar with Docker/Docker Compose and want to get started as fast as possible with a server and a single worker, check out the base configuration below:
services:
handbrake-server:
image: ghcr.io/thenickoftime/handbrake-web-server:latest
container_name: handbrake-web-server
user: 1000:1000 # edit to run as user (uuid:guid) with permissions to access your media. 0:0 to run as root (not recommended).
ports:
- 9999:9999
volumes:
- /path/to/your/data:/data
- /path/to/your/media:/video # ensure this path is the same across all containers
handbrake-worker:
image: ghcr.io/thenickoftime/handbrake-web-worker:latest
container_name: handbrake-web-worker
user: 1000:1000 # edit to run as user (uuid:guid) with permissions to access your media. 0:0 to run as root (not recommended).
environment:
- WORKER_ID=handbrake-worker # give your worker a unique name
- SERVER_URL=handbrake-server # change if setting up a standalone worker, prefix with http(s):// if necessary
- SERVER_PORT=9999 # change if using a reverse proxy or the port is otherwise different than above
volumes:
- /path/to/your/media:/video # ensure this path is the same across all containers
depends_on:
- handbrake-server
Usage
Presets
HandBrake Web currently uses presets configured in the desktop application of HandBrake and exported to .json files to configure encoding jobs. Exported presets can then be uploaded via the web interface in the 'Presets' section. Please see the Presets wiki page for additional information.
Hardware Accelerated Encoding
Additional configuration is required to enable hardware accelerated encoding for GPUs - please see the Hardware Acceleration wiki page for additional information. Currently Intel QSV and NVIDIA NVENC hardware encoding are supported. Support for AMD VCN is planned, but not yet implimented.
Features
These lists are not comprehensive, please see the development project for more information...
Current Features
- Web Interface - Interact with HandBrake on a headless device via a web browser.
- Job Queue - Create and manage a queue of jobs for your workers to tackle in order.
- Bulk Job Creation - Easily create multiple jobs at once for videos in the same directory.
- Preset Management - Upload, Rename, and Delete HandBrake presets in the web interface.
- Directory Monitoring - Create directory "Watchers" to automatically create jobs based on various criteria.
- Distributed Encoding - Leverage multiple devices/nodes/workers to tackle encoding tasks concurrently.
- Hardware Accelerated Encoding - Use a GPU to speed up encoding times.
- Intel QSV - Use your discrete and/or integrated Intel GPU.
- NVIDIA NVENC - Use your discrete NVIDIA GPU.
Planned Features (not yet implemented)
- Preset Creator - Create presets directly in the web interface.
- Upload Files - Upload video files to the server via the web interface.
- Hardware Accelerated Encoding - Use a GPU to speed up encoding times.
- AMD VCN - Use your discrete and/or integrated AMD GPU.
- User Sessions - Logging in required to access the web interface.
Bonus Tool (Minimal HandBrakeCLI Image)
If you are looking for a dockerized/containerized way to directly use HandBrakeCLI (via terminal), you can use an additional image this project provides -ghcr.io/thenickoftime/handbrake-cli. You can find additional information about using it on the HandBrakeCLI Image wiki page.
This "bonus" image was incredibly simple to make by using the existing outputs of this project's build process, so it felt rude to not make it available to anyone who might want to use it.
Contributing & Development
Please see CONTIBUTING.md.