Show HN: FFmpeg WebCLI – Full FFmpeg in Browser, Offline PWA, No Uploads(WASM) A developer released FFmpeg WebCLI, a browser-based video editor that runs entirely offline as a progressive web application using WebAssembly. The tool processes all video operations locally on the user's device without uploading files to any server, supporting over 30 operations including format conversion, compression, trimming, and GIF creation. The application prioritizes privacy with zero data collection and works with files entirely on the user's machine. A browser-based video editor powered by ffmpeg.wasm https://github.com/ffmpegwasm/ffmpeg.wasm . No uploads, no servers -- all processing happens locally in your browser using WebAssembly. πŸš€ Live app: https://tejaswigowda.com/ffmpeg-webCLI/ https://tejaswigowda.com/ffmpeg-webCLI/ - βœ… No Server Uploads β€” All video processing happens entirely on your device - βœ… 30+ Video Operations β€” GIF creation, format conversion, compression, trimming, effects, filters, and more - βœ… 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 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. 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 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. 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. 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. 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 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 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. Correct orientation or create mirror effects without re-uploading. Options: 90Β° clockwise, 90Β° counter-clockwise, 180Β°, flip horizontal, flip vertical, or flip both axes. 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. 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. Play the video and audio backwards using ffmpeg's reverse + areverse filters. 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. 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. 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. Mux an .srt , .vtt , or .ass subtitle file into the video as a soft subtitle track -- toggleable on/off in any media player VLC, browser, etc. without re-encoding the picture. Output format choices: MP4 -- subtitle stream encoded as mov text MKV -- subtitle stream copied natively preserves ASS/SSA styling Video and audio are stream-copied zero quality loss, near-instant . Hard-burning subtitles into the picture requires a libass-enabled ffmpeg build and is not available in the standard WebAssembly core. Boost or reduce the audio level of any video. A single slider sets the volume multiplier 0 = silence, 1.0 = unchanged, up to 4Γ— . Audio is re-encoded using the volume filter; the video stream is stream-copied no quality loss, no re-encode overhead . Play the video N times back-to-back in a single output file. Set Total plays 2–50 ; ffmpeg uses -stream loop with stream copy so there is no re-encoding and the output file is proportionally larger. Trim is not applied for this operation. Stamp a logo, watermark, or any image PNG with transparency works best onto every frame. Controls: Image file β€” any PNG, JPG, GIF, or WebP Position β€” bottom-right, top-left, top-right, bottom-left, or centre Width % of video β€” scales the logo relative to the video width default 15% Uses the overlay filter with a scale pre-pass. Video is re-encoded; audio is stream-copied. Blend a second audio file into the video as background music. Controls: Music / audio file β€” MP3, WAV, OGG, AAC, FLAC, M4A Original audio volume slider 0–2, default 1.0 Music volume slider 0–2, default 0.30 The music track loops automatically via -stream loop -1 if it is shorter than the video. Both streams are mixed with the amix filter duration=first so output matches the video length . Video is stream-copied. Append a second video clip after the loaded file. Uses the concat filter with H.264/AAC re-encoding, so clips with different resolutions, frame rates, and codecs are handled automatically. Trim applies to the first clip only; the second clip is taken in full. Place two video clips next to each other in a single frame: Layout β€” Horizontal left / right using hstack or Vertical top / bottom using vstack Common dimension β€” target height in pixels for horizontal layout, or target width for vertical layout both clips are scaled to match Audio β€” take from the first clip, the second clip, or output no audio Re-encodes to H.264/AAC. Useful for comparison videos, reaction videos, and split-screen content. Trim is ignored. Overlay a second video on top of the main clip in a small inset window. Controls: Overlay video β€” the smaller video to appear as the inset Position β€” corner or centre same options as Logo Overlay Width % of main video β€” controls the inset size default 30% The overlay video loops automatically if it is shorter than the main clip. Trim applies to the main clip. Audio from the main clip is preserved. Both streams are re-encoded to H.264/AAC. Displays key metadata extracted from the browser's video element immediately when a file is loaded: - File name, size, duration, resolution, estimated bitrate, and MIME type Click Process Video to run a deep scan ffmpeg -hide banner -i … and print full codec, stream, pixel format, and container details to the log panel below. Full access to the ffmpeg command line directly in the browser. Type any arguments into the text area; they are inserted after -i input and before the output filename. Choose the output file extension and optionally bypass the trim range. A live full command preview updates as you type, showing the exact command that will be executed. Quoted values containing spaces are handled correctly. An Example Commands library collapsible provides one-click recipes to get started: | Example | What it does | |---|---| | πŸ”² Color-bar watermark | Semi-transparent drawbox stamp in the bottom-right corner | | 🎞 Cap framerate to 24 fps | fps=24 filter + H.264 re-encode | | 🎨 Convert to grayscale | format=gray + H.264 re-encode | | πŸ”Š Loudness normalize | loudnorm filter, stream-copies video | | πŸ“¦ Lossless remux copy | -c copy β€” change container, zero quality loss | | πŸ“ Letterbox / pillarbox | Scales to 1920Γ—1080, pads with black bars | | πŸŒ€ Denoise hqdn3d | Temporal + spatial denoising | | πŸ” Sharpen unsharp | unsharp mask filter | | 🎯 Stabilize deshake | deshake motion stabilization | | πŸŒ‘ Vignette effect | vignette filter darkens edges | | πŸ”‡ Extract audio as WAV | -vn -acodec pcm s16le lossless audio export | | πŸ–Ό Extract first frame | -vframes 1 saves a single PNG | | 🎡 Replace audio track | Strips original audio and muxes in input2.mp3 ; uses -map 0:v:0 -map 1:a:0 -shortest | Clicking a recipe fills in the arguments and extension fields instantly. Second input fileβ€” the Raw FFmpeg panel includes an optionalChoose filepicker. The selected file is written to ffmpeg's virtual filesystem as input2.