offline-first
100% local. Data never leaves your browser.
Fork on GitHub
ffmpeg not loaded - click "Load ffmpeg" to begin
Input Video
Click to choose or drag & drop local file
MP4, WebM, MOV, AVI, MKV, GIF…
0 files queued
Trim applied to all operationsDisabled (batch mode)
Drag the handles to set start and end. Leave untouched to keep the full video.
0:00.0
0:00.0
0:00Full duration--:--
Operations
Convert to format
Use the Output Format selector below to choose format.
Resize & Compress
28(18=best · 28=default · 51=worst)
Dimensions are filled from the source video. Clear a field or set to -1 to preserve aspect ratio. Lower CRF = higher quality.
Extract audio track
Remove audio track
Output will be the same video with the audio stream stripped.
Animated GIF
Height is calculated automatically to preserve aspect ratio.
Playback speed
Rotate / Flip
Crop
Load a video to crop.
Load a video to preview the crop area.
Drag the box to move it. Drag the handles to resize.
Extract Thumbnail
Extracts a single frame at the given timestamp as an image file.
Reverse
Plays video and audio backwards. The whole clip is buffered in memory - keep clips under ~2 minutes for best results.
Fade In / Out
Set either value to 0 to skip that direction. Applied after trimming.
Adjust
0
1
1
Strip Metadata
Removes all embedded metadata (GPS, camera info, creation date, etc.) from the output file. Video and audio are re-encoded.
Embed Subtitles
No file chosen
Soft subtitles recommended for VLC & browsers. Hard-burn for social media & guaranteed visibility.
Auto-Caption (Whisper)
Unchecked: Fast, embeds as soft subtitle stream. Checked: Slower, burns subtitles directly into frames.
Base model is recommended for most videos. Downloads and caches on first use.
Transcript (Editable)
Process is 100% local: audio is extracted, transcribed on-device with Whisper via Transformers.js, and embedded as soft subtitles. Zero data leaves your browser.
Volume
1.0 = original · >1 = boost · <1 = reduce · 0 = silence. Audio is re-encoded; video is stream-copied.
Loop / Repeat
Streams are copied without re-encoding. The clip plays N times back-to-back. Trim is ignored for this operation.
Logo / Image Overlay
No file chosen
PNG with alpha gives cleanest results. Video is re-encoded to preserve overlay.
Mix Audio (Background Music)
No file chosen
Music loops automatically if it is shorter than the video. Video is stream-copied.
Concatenate (Join Clips)
No file chosen
Uses the concat filter - different resolutions and codecs are handled by re-encoding to H.264/AAC. Trim applies to the first clip only.
Side by Side
No file chosen
Both clips are scaled to the same height (horizontal) or width (vertical) then stacked. Re-encodes to H.264/AAC. Trim is ignored.
Picture in Picture
No file chosen
Overlay video loops if shorter than the main clip. Audio from the main clip is preserved. Trim applies to the main clip.
Media Info
Load a video file to see its properties.
Click Process Video to run a deep scan and log full codec & stream details below.
Raw FFmpeg
► Example Commands
No file chosen
--
Args are split on whitespace. Wrap values containing spaces in double quotes, e.g. -vf "scale=1280:-2,hflip"
Pad to Aspect Ratio
Video is scaled down to fit; empty space is filled with the chosen color. Re-encodes to H.264.
Normalize Audio (EBU R128)
Uses the loudnorm filter. Video stream is copied without re-encoding.
Denoise (hqdn3d)
Applies spatial + temporal noise reduction via hqdn3d. Higher strength = smoother but softer image.
Boomerang
Plays the clip forward then immediately in reverse — classic boomerang loop. Trim is respected. Audio is removed from the output.
Sharpen / Blur
Sharpen uses unsharp; blur uses boxblur. Audio is copied.
Operation Stack
No operations yet — configure an op above and click “Add to Stack”.
(stack is empty)
Operations run in the listed order as one filter chain with a single re-encode. Trim (if set) is applied first.