How to hardware-accelerated av1 encoding for modern gpus
- Step 1Confirm your GPU can encode AV1 — Hardware AV1 encode (not just decode) needs NVIDIA RTX 40-series, Intel Arc Alchemist+, or Apple M3 / M4. An RTX 30-series or M1/M2 can play AV1 but cannot encode it in hardware — the tool will refuse. If you are unsure, just drop a clip in; the encoder probes the device and tells you immediately.
- Step 2Drop your source video onto the tool — Accepts a single video file (MP4, MOV, MKV, WebM, AVI, M4V, TS). The file is opened in an off-screen
<video>element to read its frames — nothing is uploaded. AV1 encode is single-file only (no batch); for queues of clips, encode them one at a time. - Step 3Set Bitrate, or leave it at 0 for auto — Bitrate (kbps) is the only quality lever and it tops out at 50000 (50 Mbps). Leave it at 0 to let JAD compute a target from the resolution (~0.04 bits/pixel — about 250 kbps for 360p, ~2.5 Mbps for 1080p, ~10 Mbps for 4K). There is no CRF / CQ / cpu-used field because the WebCodecs hardware encoder is rate-controlled, not quality-controlled.
- Step 4Set Framerate, or leave it at 0 for auto — Framerate (0 = auto) lets you force a target fps up to 120. At 0, JAD uses 30 fps because the browser cannot reliably read true source framerate from an
HTMLVideoElement. If your source is 24 or 60 fps, type the real number here to avoid speed/duration drift in the output. - Step 5Encode — the GPU does the work, FFmpeg.wasm muxes — Each decoded frame is pushed through the hardware
VideoEncoderwith a keyframe every fps×2 frames. The encoded AV1 chunks are concatenated and muxed by FFmpeg.wasm into an AV1 stream. Progress reports encoded frames vs total; on a Pro + Media plan the output streams to your save-file handle. - Step 6Download the AV1 file (verify it plays) — Open the result in a current Chrome/Firefox/Edge to confirm playback. Note: this tool writes video only — the source audio track is not carried through the hardware path. If you need audio kept, transcode with the video transcoder instead. For Discord/email size targets that keep audio, use the Discord compressor.
Which GPUs can hardware-encode AV1
JAD's AV1 encoder runs only when the browser reports a working av01.0.04M.08 VideoEncoder, which requires a dedicated hardware AV1 encode block. Decode-only hardware does not qualify. Status current as of 2026.
| Hardware | AV1 hardware encode? | Notes |
|---|---|---|
| NVIDIA RTX 40-series (Ada) | Yes | Dual AV1 NVENC encoders. The reference 'fast AV1' target this tool was designed around |
| NVIDIA RTX 30 / 20-series | Decode only | AV1 decode supported; no AV1 encode block — the tool will refuse |
| Intel Arc (Alchemist / Battlemage) | Yes | Xe-media engine has AV1 encode; among the earliest consumer AV1 encoders |
| Intel integrated (Xe / UHD pre-Arc) | Decode only | Many recent iGPUs decode AV1 but do not encode it |
| Apple M3 / M4 | Yes (encode) | M3 added AV1 hardware decode; the media engine handles AV1 encode via VideoToolbox in supported browsers |
| Apple M1 / M2 | No | No AV1 hardware acceleration — encode refused |
| Older / no discrete GPU | No | Throws 'Hardware encoding for AV1 is not available on this device' |
The two real AV1 encoder controls
The entire AV1 encoder UI. Defaults are bitrate 0 (auto) and fps 0 (auto). There is deliberately no CRF, CQ, cpu-used, or preset field.
| Control | Range | Default | What it does |
|---|---|---|---|
| Bitrate (kbps · 0 = auto) | 0–50000 | 0 (auto) | Target bitrate for the hardware encoder. 0 = JAD computes ~0.04 bits/pixel from the resolution |
| Framerate (0 = auto) | 0–120 | 0 (auto) | Forces output fps. 0 = 30 fps (browser can't read true source fps from HTMLVideoElement) |
| Keyframe interval | fixed | fps × 2 | Not user-exposed — a keyframe is forced every two seconds of frames |
| Latency mode | fixed | realtime | Not user-exposed — realtime keeps the encoder fast enough to track the source decode rate |
Cookbook
Concrete encodes on real hardware. The 'auto' bitrate column is the ~0.04 bits/pixel target JAD applies when you leave Bitrate at 0.
1080p30 screen recording on an RTX 4070
A typical desktop-capture clip. Leaving bitrate at auto lets JAD pick the per-pixel target; the Ada AV1 NVENC keeps the encode at roughly real-time playback speed.
Source : 1920x1080, 30 fps, H.264, video-only GPU : NVIDIA RTX 4070 (Ada) Settings: Bitrate 0 (auto), Framerate 0 (auto) Auto bitrate = 1920*1080 * 0.04 ≈ 82,944,000 mbps? no → pixels = 2,073,600 × 0.04 = ~82,944 bits/px·s practical target ≈ 2.5 Mbps for 1080p Output : AV1 elementary stream, ~30 fps, no audio track
4K30 master on an Intel Arc A770
Arc's Xe-media engine encodes 4K AV1 in hardware. For a delivery master you usually want to pin the bitrate rather than trust auto.
Source : 3840x2160, 30 fps GPU : Intel Arc A770 Settings: Bitrate 12000 (12 Mbps), Framerate 30 The 'Framerate 0 = auto' default would force 30 fps anyway, but typing 30 makes the intent explicit and avoids drift if the source is actually 29.97.
60 fps gameplay — set fps explicitly
The most common avoidable bug. Auto framerate is 30, so a 60 fps source left on auto encodes at half the frame cadence and plays back at double duration. Always type the real fps for high-framerate sources.
Source : 2560x1440, 60 fps gameplay Wrong : Framerate 0 (auto) → encoded at 30 fps → 2x slow-mo Right : Framerate 60 → cadence preserved Keyframe interval auto-becomes 120 frames (fps × 2).
Refused: RTX 3080 (decode-only hardware)
A 30-series card decodes AV1 fine but has no AV1 encode block. The encoder probes the device before doing any work and stops cleanly instead of falling back to a slow software path.
GPU : NVIDIA RTX 3080 (Ampere)
Attempt : drop 1080p clip → Encode
Result : Error — "Hardware encoding for AV1 is not
available on this device."
Fix : use an RTX 40-series / Arc / M3 machine, or encode
H.265 instead, which has wider HW encode support.Keeping audio — route to the transcoder
The hardware AV1 path is video-only: it walks video frames and muxes the encoded video stream, with no audio re-mux. If you need the audio track, the FFmpeg-based transcoder is the right tool.
Need : AV1 video + original audio
This tool: outputs video-only AV1 stream
Use : /video-tools/video-transcoder
(pick a codec + keep audio), or a size-target
tool that re-muxes AAC audio (discord-compressor).Edge cases and what actually happens
Device has no AV1 hardware encoder
Not availableBefore encoding, the tool calls detectVideoCapabilities() and checks caps.codecs.av1.encode. If the browser cannot configure a av01.0.04M.08 VideoEncoder, it throws 'Hardware encoding for AV1 is not available on this device.' There is no libaom-av1 software fallback in this tool — by design, so you never accidentally start a multi-hour CPU encode. Switch to a qualifying GPU or use the H.265 encoder.
30-series NVIDIA / M1 / M2 (decode-only)
Encode refusedThese chips advertise AV1 decode but have no encode silicon, so caps.codecs.av1.encode is false and the encode is refused. This is the single most common surprise: people assume 'my GPU supports AV1' means encode. It usually means decode. Check the GPU support table above.
Audio track is dropped
By designThe hardware encode path walks only video frames; it does not re-mux the source audio. The output AV1 file is video-only. This is intentional for the encoder tool — for AV1 with audio use the transcoder; for size-targeted shares that keep AAC audio use the Discord compressor.
60 / 120 fps source left on auto framerate
Speed driftAuto framerate resolves to 30 fps because the browser cannot read true fps from an HTMLVideoElement. A 60 fps source encoded at 30 fps will look slowed down / over-long. Type the real framerate in the Framerate field for any high-fps source.
Codec reclaimed mid-encode (QuotaExceededError)
Encode abortedIf the browser reclaims the hardware codec (tab backgrounded, GPU pressure, OOM), the WebCodecs error callback fires and the encode aborts cleanly with that error rather than hanging. Keep the tab focused during long 4K encodes; re-run if it happens.
Source codec not decodable by the browser
Could not loadFrames are read by playing the file in an off-screen <video>. If the browser can't decode the source (an exotic container or codec the <video> element rejects), you get 'Could not load source video. Format may be unsupported by the browser.' Transcode to a browser-friendly source (e.g. H.264 MP4) first with the transcoder.
rVFC stalls — no frames produced
Fallback engagedIf requestVideoFrameCallback produces no frames within ~3 seconds (decoder can't feed the encoder for this source), the pipeline switches to a slower seek-based frame walk. It still encodes, just more slowly. Awkward MKV/WebM sources are the usual trigger.
Output container labelling
ExpectedThe muxer writes an AV1 elementary stream and the download is named <name>-av1.mp4. AV1 is best supported in MKV/WebM containers; if a strict MP4 parser rejects the file, re-mux it without re-encoding via the web optimizer or the transcoder. The video data itself is a valid AV1 stream.
Requires the Pro + Media tier
Tier gateHardware encoding via WebCodecs is gated to the Pro + Media tier (alongside the streaming-to-disk pipeline). Free and Pro tiers don't unlock it. The video file ceiling on Pro + Media is 100 GB streaming, single file per AV1 encode.
Very large 4K / 8K file
SupportedBecause frames stream through the encoder and the result writes to a save-file handle, large masters don't have to fit in RAM. The probe profile is level 4.0 (1080p30 / 4K30); higher resolutions/framerates may negotiate a higher level if the GPU supports it, but the conservative default targets 4K30.
Frequently asked questions
Does this use libaom-av1 in WebAssembly?
No. Despite older copy you may have seen, this tool does not run libaom-av1 in WASM. It uses the browser's WebCodecs VideoEncoder with the av01.0.04M.08 profile, which delegates to your GPU's hardware AV1 encoder. The only FFmpeg.wasm step is muxing the already-encoded chunks into a file — no software encoding.
Which GPUs actually encode AV1 in hardware?
NVIDIA RTX 40-series (Ada, with AV1 NVENC), Intel Arc Alchemist and newer, and Apple M3 / M4. RTX 30/20-series, Apple M1/M2, and most integrated GPUs can decode AV1 but cannot encode it — those devices will see 'Hardware encoding for AV1 is not available on this device.'
What happens if my hardware can't encode AV1?
The tool refuses immediately with a clear error. There is intentionally no slow CPU fallback, so you never start a multi-hour libaom encode by accident. Your options: use a qualifying GPU, or encode H.265 with the H.265 encoder, which has much wider hardware-encode support (NVENC, QuickSync, VideoToolbox, AMF).
Where is the CRF / quality / cpu-used setting?
There isn't one. Hardware WebCodecs encoders are rate-controlled, not quality-controlled, so the only quality lever is Bitrate (kbps). Set a higher bitrate for higher quality, or leave it at 0 for an auto target of ~0.04 bits/pixel. cpu-used is a libaom software concept and doesn't apply to the hardware path.
Why is auto framerate 30 fps even for a 60 fps clip?
The browser cannot reliably read the true framerate of a file from an HTMLVideoElement, so the auto default is a safe 30. For 24, 25, 50, 60, or 120 fps sources, type the real number into the Framerate field — otherwise the output's cadence and duration will be wrong.
Will the output keep my audio?
No — the hardware AV1 encoder is video-only. It walks and encodes video frames and muxes just the video stream. For AV1 (or any codec) with audio preserved, use the video transcoder. For shares that keep audio and hit a size target, use the Discord compressor.
Is anything uploaded?
No. The file is opened locally in an off-screen <video>, frames are encoded on your GPU, and FFmpeg.wasm muxes the result in your tab. Nothing about the video content leaves your machine. The only server interaction is an optional anonymous 'file processed' counter for dashboard stats.
How fast is hardware AV1 vs software AV1?
Dramatically faster — dedicated AV1 encode blocks (Ada NVENC, Arc Xe-media, Apple media engine) run at or near real-time, whereas libaom software AV1 at high quality can be 10–50× slower than even libx265. That speed gap is the whole reason this tool is hardware-only.
What container and codec does it output?
An AV1 video stream muxed by FFmpeg.wasm; the download is named <name>-av1.mp4. AV1 is happiest in MKV/WebM; if a strict MP4 player rejects it, re-mux without re-encoding via the transcoder. The AV1 stream itself is valid.
Can I batch-encode multiple files?
Not in this tool — AV1 encode runs one file at a time. Encode clips sequentially. (The video WASM engine is a single instance, so video tools serialize anyway.)
What plan do I need?
The Pro + Media tier. Hardware WebCodecs encoding and streaming-to-disk are gated to that tier. On Pro + Media the per-file video ceiling is 100 GB streaming.
How do I compare AV1 against H.265 on my own footage?
Encode the same clip both ways and compare size at matched quality — see the AV1 vs H.265 comparison spoke, and run the H.265 side with the H.265 encoder.
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.