How to encode h.265 / hevc with hardware acceleration in your browser
- Step 1Open the H.265 encoder on a device with a hardware HEVC encoder — Use a recent Chrome / Edge on Windows (NVENC / AMF / Quick Sync), or Safari / Chrome on a Mac (VideoToolbox). The tool requires the Pro + Media plan. If your browser exposes no hardware HEVC encoder, the run will fail rather than fall back to software — see the edge cases below.
- Step 2Drop your source video — Accepted inputs are MP4, MOV, MKV, WebM, AVI, M4V, and TS. The file is decoded by an off-screen
<video>element, so the source codec also has to be something the browser can play (H.264, VP9, and AV1 are safe; some MKV/AVI codecs aren't). - Step 3Set the target bitrate (kbps) — Leave it at
0for auto (~ width × height × 0.06bits/sec), or enter a kbps figure — the field multiplies by 1000 internally, so6000means 6 Mbps. Higher bitrate = higher quality and larger file. There is no CRF slider; quality is purely a function of the bitrate you target. - Step 4Optionally set a framerate — Leave at
0to keep the source cadence (JAD assumes 30 fps when it can't read the true rate from the browser). Enter a value to force a fixed output framerate. - Step 5Run the encode (or stream to disk) — On Pro + Media with the File System Access API available, the result streams straight to a save location you pick — no blob held in memory. Otherwise the MP4 comes back as a download. Progress is reported as encoded frames over total frames.
- Step 6Verify the output plays and check for audio — The output is
<name>-h265.mp4, video-only. If you need the audio track carried through, that is not what this tool does — re-attach it, or use a bitrate/size tool that preserves audio (see the cookbook and FAQs).
What the H.265 encoder actually exposes
The complete control and behaviour surface, read from the tool client and the WebCodecs pipeline. There are exactly two options — anything not listed here is not a control this tool has.
| Aspect | Reality | Notes |
|---|---|---|
| Engine | WebCodecs VideoEncoder (hardware) + FFmpeg.wasm muxer | Encode on the GPU video block; only the MP4 mux is CPU-bound |
| Codec | H.265 / HEVC | Annex-B framing, SPS/PPS inlined at each keyframe |
| Output container | MP4 (<name>-h265.mp4) | Always MP4 — no MKV/MOV output choice on this tool |
| Quality control | Target bitrate (kbps), 0 = auto | No CRF, no -preset. Auto ≈ width × height × 0.06 bps |
| Framerate | 0 = source (assumed 30 if unknown), or a forced value | JAD can't always read true fps from the browser |
| Latency mode | realtime | Prioritises keeping up with decode over rate-distortion lookahead |
| Keyframe interval | ≈ framerate × 2 (every ~2 seconds) | Fixed by the pipeline; not user-configurable here |
| Audio | Dropped — output is video-only | This tool's HW path does not carry the audio track through |
| Plan required | Pro + Media | Free / Pro see the upgrade overlay and cannot run it |
Hardware HEVC encoder support by platform
Which devices expose a hardware HEVC encoder to WebCodecs. If yours doesn't, this tool fails fast rather than dropping to software.
| Platform | Hardware encoder | Typically available? |
|---|---|---|
| Windows + NVIDIA GPU | NVENC | Yes on GeForce / Quadro with HEVC encode (most GTX 900-series and newer) |
| Windows + AMD GPU | AMF (VCE/VCN) | Yes on most modern Radeon |
| Windows + Intel iGPU | Quick Sync (QSV) | Yes on most modern Intel integrated graphics |
| macOS (Apple Silicon / recent Intel) | VideoToolbox | Yes — HEVC encode is broadly available |
| Android Chrome | MediaCodec | Often, but heap limits cap large sources (see edge cases) |
| iOS Safari | VideoToolbox via MediaCodec exposure | Varies; large files can hit memory ceilings |
| Firefox | — | WebCodecs HEVC encode is generally not exposed — expect a fail-fast |
Tier file-size and batch limits (video family)
Per-job file-size and batch limits from the tier table. Note: this tool also requires the Pro + Media plan to run at all, so the Free / Pro rows describe the dropzone gate, not a runnable state.
| Plan | Max file size | Files per job | Can run this tool? |
|---|---|---|---|
| Free | 1 GB | 1 | No — Pro + Media gate |
| Pro | 10 GB | 5 | No — Pro + Media gate |
| Pro + Media | 100 GB (streamed) | 50 | Yes |
| Developer | 100 GB (streamed) | Unlimited | Yes |
Cookbook
Real before/after settings for hardware HEVC encodes. Quality is bitrate-driven — these examples show what to type in the two fields and what comes out.
Auto bitrate, keep everything else default (1080p)
The simplest case: leave both fields at 0. JAD picks a bitrate from the resolution and keeps the source framerate. For 1920×1080 that's roughly 1920 × 1080 × 0.06 ≈ 124 Mbps cap target — in practice the hardware encoder lands well under that for typical content, but it is a ceiling, not a CRF, so very busy footage spends the budget.
Input: clip-1080p.mp4 (1920x1080, H.264) Fields: Bitrate (kbps) = 0 Framerate = 0 Pipeline: bitrate = auto (~ 1920*1080*0.06 bps) fps = source (or 30 if unreadable) latency = realtime keyframe = every ~2 s Output: clip-1080p-h265.mp4 (HEVC video, NO audio)
Pin an exact target bitrate
When you want a predictable file size, set the bitrate explicitly. The field is in kbps and is multiplied by 1000 internally — so typing 6000 targets 6 Mbps. There is no CRF; this is your only quality lever.
Goal: ~6 Mbps HEVC for a 1080p upload Fields: Bitrate (kbps) = 6000 Framerate = 0 Stored: bitrate = 6,000,000 bps Rule of thumb (file size): size_MB ~= bitrate_Mbps * duration_s / 8 6 Mbps * 60 s / 8 ~= 45 MB of video (audio not included)
Normalise a variable-framerate phone clip
Screen-recordings and some phone cameras emit variable framerate, which downstream tools dislike. Force a constant output framerate on the way out.
Input: screen-rec.mp4 (VFR, bursts to 60 fps)
Fields: Bitrate (kbps) = 8000 Framerate = 30
Result: constant 30 fps HEVC at 8 Mbps target
Note: forcing fps lower than source drops frames;
higher than source duplicates them.Get the audio back after a HEVC encode
This tool's hardware path drops audio — the output MP4 has no sound. If you need it, the practical move is to keep the original for its audio and re-attach, or use a tool whose path preserves audio. State this plainly to anyone you hand the file to.
Symptom: clip-h265.mp4 plays silently
Why: the WebCodecs HW encode path is video-only here
Options:
- Keep the source; this tool is for the video stream
- For a smaller file WITH audio, target a size/bitrate
with /video-tools/video-bitrate-set or
/video-tools/discord-compressor (audio preserved)When hardware HEVC isn't available — pick the right fallback
If the device has no hardware HEVC encoder (e.g. Firefox, or a GPU without HEVC encode), this tool errors immediately instead of doing a slow software encode. Choose a sibling deliberately.
Error: "Hardware encoding for H265 is not available on this device."
Fallbacks:
- Software HEVC (libx265 WASM):
/video-tools/video-transcoder (codec=h265, CRF control)
- AV1 hardware (RTX 40 / Arc / M3+):
/video-tools/av1-encoder
- Just shrink an MP4 for the web (H.264):
/video-tools/web-optimizerEdge cases and what actually happens
No hardware HEVC encoder on the device
Encode failsIf the browser exposes no hardware HEVC encoder — Firefox is the common case, as are GPUs without HEVC encode — the pipeline throws "Hardware encoding for H265 is not available on this device." before the first frame. By design it does not silently drop to software. For a software HEVC encode use the video-transcoder with codec H.265 (CRF-controlled libx265 WASM).
Audio track is missing from the output
By designThe hardware encode path is video-only — the source audio is not carried through, so the resulting MP4 is silent. This is intentional in the current pipeline, not a bug. If you need sound, keep the original or use a size/bitrate tool that preserves audio such as video-bitrate-set.
Free or Pro plan
Upgrade requiredThis tool is gated to Pro + Media. On Free and Pro the upgrade overlay appears and the encode cannot run, even though the dropzone shows the tier's file-size limit (1 GB on Free, 10 GB on Pro). The hardware-encode and streaming pipeline are part of the Pro + Media plan.
Source codec the browser can't decode
Load failsFrames are pulled from an off-screen <video> element, so the source has to be browser-decodable. Some MKV/AVI codecs (e.g. older DivX/Xvid, certain 10-bit profiles) won't load and you'll see "Could not load source video. Format may be unsupported by the browser." Transcode to MP4/H.264 first with the video-transcoder, then encode to HEVC.
Large file on a phone
OOM riskMobile browsers have a tight WASM heap. Hosting an HEVC encode plus the MP4 muxer for a large source can exhaust memory before completion. Stick to smaller clips on phones, or run on a desktop with a discrete or integrated hardware encoder.
Bitrate set very low
Quality dropBecause quality is bitrate-driven (no CRF), an aggressive low target produces visible blocking and smear on motion-heavy content. There is no rate-distortion lookahead in realtime mode to rescue it. Raise the bitrate, or use the video-transcoder's CRF control if you want quality-targeted output.
Encoder reclaimed mid-run (tab backgrounded / GPU pressure)
Aborts cleanlyIf Chrome reclaims the codec (e.g. the tab is backgrounded, or another app grabs the GPU encoder), the pipeline races the encode against the encoder's error event and aborts immediately rather than hanging. Re-run with the tab foregrounded.
True framerate can't be read
Assumes 30 fpsThe browser doesn't reliably expose source framerate, so when Framerate is 0 JAD assumes 30 fps for the frame-count estimate. The encode still walks every real frame, but the progress total and any duration math are estimates if the source isn't actually 30 fps. Set Framerate explicitly for exact cadence.
Output won't play in Firefox / on an old device
Decoder supportThe file is valid HEVC-in-MP4; the issue is the player. Firefox often won't decode HEVC, and pre-2015 devices may lack HEVC decode. For maximum playback reach distribute H.264 (web-optimizer) and keep HEVC for archive or known-compatible targets.
Frequently asked questions
Is this really hardware-accelerated, or is it FFmpeg in WASM?
It's genuinely hardware-accelerated. The encode runs on your machine's dedicated video encoder (NVENC, VideoToolbox, AMF, or Quick Sync) through the browser's WebCodecs VideoEncoder API. FFmpeg.wasm is used only to mux the resulting HEVC bitstream into an MP4 — that's the one CPU-bound step. The slow, full-software libx265-in-WASM path is what the separate video-transcoder tool uses.
Why is there no CRF or preset option?
WebCodecs hardware encoders are rate-controlled, not CRF-controlled — you give them a target bitrate, not a quality factor. So this tool exposes a bitrate field (kbps, 0 = auto) and a framerate field, and nothing else. If you specifically want CRF-targeted HEVC, use the video-transcoder with codec H.265, which runs libx265 in WASM and accepts a CRF value.
What bitrate does 'auto' (0) actually pick?
For HEVC the pipeline targets roughly width × height × 0.06 bits per second. At 1080p that's a high ceiling; the hardware encoder typically uses less on ordinary content, but busy footage will spend the budget. If you need a predictable file size, set the bitrate explicitly rather than leaving it on auto.
Does the output keep my audio?
No. The hardware encode path here is video-only — the output MP4 has no audio track. This is intentional in the current pipeline. If you need sound, keep the original for its audio, or use a tool whose path preserves audio, such as video-bitrate-set or one of the size-target compressors.
What container do I get out?
Always MP4 — the file is named <yourname>-h265.mp4. There's no MKV or MOV output choice on this tool. If you need a different container, run the MP4 through the video-transcoder afterwards.
How much smaller is HEVC than H.264?
Roughly 40–50% smaller at the same visual quality, which is the whole point of HEVC. The exact saving depends on content and the bitrate you target. The trade-off is decoder support: HEVC plays on modern Apple devices, Windows with the HEVC codec, recent Android and Smart TVs, but not in Firefox and not on older hardware.
Why did it fail with 'Hardware encoding for H265 is not available'?
Your browser doesn't expose a hardware HEVC encoder. The common causes are Firefox (which generally doesn't), or a GPU without HEVC encode support. The tool deliberately fails fast instead of doing a slow software encode. Switch to a Chromium browser on hardware with NVENC/AMF/Quick Sync or a Mac with VideoToolbox, or use the video-transcoder for a software HEVC encode.
Does anything get uploaded?
No. Decoding, encoding, and muxing all happen in your browser tab. The video never leaves your machine. The only thing recorded server-side is an anonymous usage counter for signed-in dashboard stats — no file content.
How big a file can I encode?
On Pro + Media the per-job limit is 100 GB and output streams to disk. The practical limit is your device: large sources on a phone can exhaust the WASM heap. Free (1 GB) and Pro (10 GB) show those caps in the dropzone, but this tool requires Pro + Media to actually run.
Can I batch-encode several files?
Pro + Media allows up to 50 files per job and Developer is unlimited; the client runs them sequentially through the same hardware path. Each output is named after its source with the -h265.mp4 suffix.
Will the file play on an iPhone?
Yes — iPhones decode HEVC natively (iOS 11+). HEVC is in fact Apple's preferred capture codec. The file will also play in Apple's apps, Windows with the HEVC extension installed, and most modern Smart TVs. It won't play in Firefox or on pre-2015 hardware.
Can I run this from a script or pipeline?
The hardware encode path requires a real browser with a hardware encoder and the WebCodecs API, so it runs in the tab. The local @jadapps runner can drive video tools via FFmpeg for headless flows, but a script that needs GPU HEVC specifically should target a machine and browser that expose the hardware encoder. For purely software, scriptable HEVC, the video-transcoder's libx265 path is the better fit.
Privacy first
Every JAD Video tool runs entirely in your browser via WebCodecs and FFmpeg (WebAssembly). Your video files never leave your device — verified by zero outbound network requests during processing.