ffmpeg-webCLI is a free, open source media & streaming project written in JavaScript and released under GPL-3.0. It has 1,429 GitHub stars, 131 forks and 0 open issues, and was last pushed 12 days ago. On this registry it ranks #24 of 34 tracked projects in Media & Streaming, with 5 head-to-head comparisons available.

What is ffmpeg-webCLI?

ffmpeg-webCLI is a browser-based video and audio editor built on ffmpeg.wasm that runs every operation locally in the browser, aimed at anyone who needs to convert, trim, compress, caption, or extract media without uploading files to a server.

What it is

ffmpeg-webCLI is a JavaScript application that loads ffmpeg.wasm — the WebAssembly build of ffmpeg — into the browser and exposes its processing power through a graphical interface and a raw command line. It ships as a Progressive Web App, so it installs as a native-feeling app and continues working offline after first load. It is a reference implementation of the Web-CLI architecture described by Tejaswi Gowda (Arizona State University) in "The Web-CLI: Verifiable Privacy for Tools, Models, and Inference Engines in the Browser" (arXiv:2608.28950), which names four properties: fidelity, progressive disclosure, offline-first, and zero egress. It lives in the browser media-processing ecosystem alongside ffmpeg.wasm itself, and it is licensed under GPL-3.0.

The concrete problem it solves is file egress. Cloud tools perform the same video conversions but require an upload, which means the file passes through someone else's infrastructure and is subject to breaches, subpoenas, and changing privacy policies. ffmpeg-webCLI replaces the upload-and-download round trip with in-browser execution: the file is read by the browser, processed by WebAssembly, and written back out as a download, with zero data collection and zero server involvement. The README frames the argument as making privacy a verifiable technical property rather than a policy promise.

Key capabilities

  • Processes 30+ video operations, including GIF creation, format conversion, compression, trimming, effects, filters, and auto-captioning, with no server uploads at any stage.
  • Batch processing applies one operation or an entire operation chain to multiple videos, with real-time progress, per-file preview, individual downloads, ZIP-all, and graceful fallback.
  • Multi-format support for MP4, WebM, MKV, MOV, AVI, GIF, MP3, AAC, WAV, OGG, FLAC, JPG, and PNG.
  • GIF maker uses two-pass palette generation for higher color quality, with configurable frame rate and output width; height auto-scales to preserve aspect ratio.
  • Compression exposes a CRF slider (18 = near-lossless to 51 = maximum compression) and an encoding preset (ultrafast to veryslow), with a live output size estimate.
  • Conversion targets H.264 + AAC in MP4, VP9 + Opus in WebM, H.264 + AAC in MKV and MOV, and AVI for legacy compatibility.
  • Advanced features include raw ffmpeg command access, subtitle embedding, concatenation, picture-in-picture, and audio mixing.
  • Offline-first PWA with Screen Wake Lock, Web Worker background processing, live previews, and timeline sliders for trimming that apply on top of every other operation.

Who uses it and how

  • Privacy-sensitive users handling confidential footage, internal recordings, or personal media who cannot accept an upload to a third-party converter.
  • People on locked-down machines, shared computers, or environments where installing desktop ffmpeg is not permitted — the tool runs from a browser tab or as an installed PWA.
  • Offline and field workflows: after the first load the app works with no network, which suits travel, air-gapped review, or unreliable connectivity.
  • Batch workloads where many clips need the same treatment, such as converting a folder of recordings to WebM or extracting audio from a series of files in one run.
  • Users who want ffmpeg fidelity without the CLI learning curve; raw command access remains available when the presets are not enough.

Getting started

The README points to hosted live app at https://tejaswigowda.com/ffmpeg-webCLI/ — open it in a modern browser, or install it from that page as a PWA for offline use. No package, container image, or compose file is documented.

How it compares

Cloud tools such as CloudConvert, Kapwing, Ezgif, and Otter perform overlapping tasks, but each uploads the file to a server; ffmpeg-webCLI keeps the file on the device and charges nothing. The cloud tools mix free-with-ads and paid tiers and require accounts or sessions, while this project is GPL-3.0 open source with zero data collection and no upload path at all. The trade-off axes are therefore licence, self-hosting, data ownership, and cost model — and the client-side design wins on ownership and cost by construction, not by policy.

When to use it — and when not to

Because nothing is hosted, there is no database, storage bucket, or SMTP service to operate — but the browser is the runtime, so large files are bounded by available memory and WebAssembly throughput trails native ffmpeg builds. It is a poor fit for scripted, headless pipelines, server-side transcoding, or high-volume batch farms; those want native ffmpeg. The README is feature-oriented rather than installation-oriented, so users needing documented deployment, API access, or library-level integration should look elsewhere before adopting it.

project readme (upstream, from github) — read inline

ffmpeg webCLI

GitHub stars

A browser-based video editor powered by ffmpeg.wasm. No uploads, no servers -- all processing happens locally in your browser using WebAssembly.

Live app: https://tejaswigowda.com/ffmpeg-webCLI/


Paper

This tool is a reference implementation of the Web-CLI architecture, described in:

The Web-CLI: Verifiable Privacy for Tools, Models, and Inference Engines in the Browser Tejaswi Gowda, Arizona State University. arXiv: https://arxiv.org/abs/2608.28950

The paper defines the four properties (fidelity, progressive disclosure, offline-first, zero egress), presents four reference implementations, and argues that for sensitive data, client-side should be the default architecture - because it makes privacy a verifiable technical property rather than a policy promise.


Key Features

No Server Uploads : All video processing happens entirely on your device

30+ Video Operations : GIF creation, format conversion, compression, trimming, effects, filters, auto-captioning, and more

Batch Processing : Process multiple videos at once with the same operation - or an entire operation chain - applied to every file; real-time progress, per-file preview, individual downloads, ZIP-all, and graceful fallback

Offline-First PWA : Works completely offline after first use; install as a native app

Screen Wake Lock : Screen stays active during video processing on any device

Live Previews : See output size estimates and live settings adjustments

Multi-Format Support : MP4, WebM, MKV, MOV, AVI, GIF, MP3, AAC, WAV, OGG, FLAC, JPG, PNG

Advanced Features : Raw ffmpeg command access, subtitle embedding, concatenation, picture-in-picture, audio mixing

Fast & Responsive : Uses Web Workers for background processing

Privacy First : Zero data collection; works with your files locally


When to use this instead of cloud tools

Cloud tools like CloudConvert, Kapwing, Ezgif, and Otter handle these same tasks. Every one of them uploads your file to a server. Some are free with ads, some charge, but all of them see your file, and all are subject to data breaches, subpoenas, and shifting privacy policies.

ffmpeg-webCLI does format conversion, trimming, compression, GIF creation, audio extraction, captioning, and more all in your browser, for free. Reach for it when your files are private, when you can't install software, or when you'd simply rather not upload. Your video never leaves your device.


Use Cases

▶ GIF Maker

Convert any video clip into an animated GIF. Set the frame rate and output width; height scales automatically to preserve the aspect ratio. Uses a two-pass palette generation for the best possible color quality.

↻ Video Format Converter

Re-encode a video to a different container and codec:

  • MP4 : H.264 + AAC, widest compatibility
  • WebM : VP9 + Opus, open format optimised for the web (~45% smaller than MP4 at similar quality)
  • MKV / MOV : H.264 + AAC in alternative containers
  • AVI : legacy compatibility

⊟ Video Compression

Reduce file size without changing the resolution. Dial in the quality with a CRF slider (18 = near-lossless → 51 = maximum compression) and pick an encoding preset (ultrafast → veryslow) to trade encoding speed for compression efficiency. A live size estimate updates as you adjust the settings.

▤ Video Trimming

Set a start and end point with the timeline sliders before running any operation. Trimming is applied on top of every other operation, so you can, for example, extract a short clip, compress it, and convert it to GIF all at once.

⊞ Resize & Compress

Change the output dimensions and compress in one pass. Width and height are auto-filled from the source video; edit either value or leave it blank to let ffmpeg maintain the aspect ratio. Combines a scale filter with CRF-based H.264 encoding.

♪ Audio Extraction

Pull the audio track out of any video into a standalone audio file:

  • MP3 : universal playback
  • AAC : efficient lossy, great for mobile
  • WAV : uncompressed PCM
  • OGG Vorbis : open lossy format
  • FLAC : lossless compression

⊘ Mute Video

Strip the audio stream entirely. Output is the original video with no audio track -- useful for silent loops, social media clips, or before replacing the audio elsewhere.

▶ Speed Change

Speed up or slow down playback (0.25× – 4×). Both the video PTS and the atempo audio filter chain are adjusted so audio pitch and sync are preserved. Chains multiple atempo stages automatically when the multiplier is outside the 0.5–2.0 range that a single filter accepts.

↻ Rotate / Flip

Correct orientation or create mirror effects without re-uploading. Options: 90° clockwise, 90° counter-clockwise, 180°, flip horizontal, flip vertical, or flip both axes.

▤ Crop

Trim the frame to a specific region. X/Y offset and width/height are auto-filled from the source video dimensions so you can immediately drag values down rather than starting from scratch.

▭ Thumbnail Extractor

Pull a single frame from any point in the video and save it as a JPEG or PNG image. The timestamp field is pre-filled to the midpoint of the loaded clip.

The frame is always extracted as a PNG (ffmpeg's -frames:v 1); JPEG output is then produced in-browser via a canvas. This works around a crash (memory access out of bounds) in the WebAssembly core's MJPEG encoder, so JPEG thumbnails stay reliable across all clips, including high-frame-rate and variable-frame-rate sources.

⟲ Reverse

Play the video (and audio) backwards using ffmpeg's reverse + areverse filters. The reverse filter buffers the entire video into memory for processing, which combined with re-encoding makes it memory-intensive. Works in single mode; not supported in batch mode to prevent memory exhaustion when processing multiple large files (risk of hitting the 2GB WebAssembly heap limit).

▨ Fade In / Out

Add a smooth fade-in, fade-out, or both. Set the duration in seconds for each direction independently; the filter is applied after any trim.

◉ Adjust (Brightness / Contrast / Saturation)

Fine-tune the look of a clip with the eq filter. Three sliders control brightness (−1 → 1), contrast (0 → 2), and saturation (0 → 3). A Grayscale checkbox pins saturation to zero for instant black-and-white output.

✕ Strip Metadata

Remove all embedded metadata -- GPS coordinates, camera make/model, creation timestamps, and any other tags -- before sharing a file. Uses -map_metadata -1 during re-encoding.

▢ Embed Subtitles

Mux an .srt, .vtt, or .ass subtitle file into the video. Two methods:

  • Stream embed (soft subtitles) -- toggleable on/off in any media player (VLC, browser, etc.) without re-encoding the picture. Video and audio are stream-copied (zero quality loss, near-instant). Output format choices:
    • MP4 : subtitle stream encoded as mov_text
    • MKV : subtitle stream copied natively (preserves ASS/SSA styling)
  • Hard-burn -- captions are baked directly into the video frames, so they're always visible (ideal for social media). The standard WebAssembly core ships no fonts for libass, so cues are rendered with the browser canvas (white outlined text in a fitted, rounded box, centered along the bottom with automatic word-wrap) and overlaid onto the video, which is then re-encoded. Supports .srt, .vtt, and .ass/.ssa.

Caption font size (hard-burn only): choose Small, Medium (default), or Large. The size scales with the video resolution so captions stay proportional on any clip.

◉ Auto-Caption (Whisper)

Generate automatic captions from speech using OpenAI's Whisper model via Transformers.js. Transcription runs entirely in your browser. Your audio never leaves your device. Model weights are cached locally in IndexedDB after the first download, and the library is cached by the service worker for offline use. Edit the transcript before embedding it as a soft subtitle track or burning it into the frames.

Workflow:

  1. Extract : Audio is extracted from the video at 16 kHz mono
  2. Transcribe : Whisper processes the audio in 30-second chunks with 5-second overlap for context; the overlapping seconds are de-duplicated so captions don't repeat and stay in sync with the audio
  3. Review & Edit : Transcript appears in a textarea as SRT format - edit any caption before embedding
  4. Embed : Click Confirm & Embed to add the captions to the o

readme truncated — read the full docs on github

Frequently asked questions

Is ffmpeg-webCLI free to use?

ffmpeg-webCLI is open source under the GPL-3.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does ffmpeg-webCLI do?

A browser-based video editor powered by ffmpeg.wasm. No uploads, no servers -- all processing happens locally in your browser using WebAssembly.

What is ffmpeg-webCLI written in?

ffmpeg-webCLI is primarily written in JavaScript. Its source is publicly available at https://github.com/tejaswigowda/ffmpeg-webCLI, and it has 1,429 GitHub stars.