Convert audio and video formats, shrink a file until it fits a size limit, and read or rewrite metadata. All of it runs inside your browser.
The first job of a session downloads the FFmpeg engine, roughly 32 MB. It is the same copy VideoStudio uses, so if you have already run VideoStudio in this browser it is cached and loads instantly. You can start that download early with the Load engine button in the header.
Choose a preset to set the container, codecs, resolution, and quality in one move, or set them yourself. Changing any control switches the preset to Custom.
| Preset | Use it for |
|---|---|
| Web MP4, H.264 720p | The safe default. Plays on every browser, phone, and CMS. |
| Web MP4, H.264 1080p | Full detail for screen recordings or documents on camera. |
| Small MP4, H.264 480p | Quick evidence clips and anything headed for a slow connection. |
| MP4, H.265 | Roughly 30 to 50 percent smaller at the same quality. Older players will refuse it. |
| WebM, VP8 and Opus | Open formats, good for embedding on a page. |
| Audio only, mono MP3 96k | Meeting recordings and interviews. Tiny, and speech survives fine. |
| Audio only, FLAC | Lossless archive copy of a master recording. |
| Remux to MP4 or MKV | Change the wrapper without re-encoding. Instant, and quality is untouched. |
Lower numbers mean better quality and a bigger file. 18 is close to visually lossless, 23 is a good default, 28 is noticeably soft, and 32 and up is for when size matters more than looks. For WebM the slider maps onto a VP8 bitrate rather than a true CRF, so treat it as a quality dial rather than an exact number.
Setting both codecs to "Copy, no re-encode" rewraps the existing streams. It finishes in seconds and loses nothing, but it only works when the target container accepts those codecs. MP4 will not hold VP8 or Vorbis, for instance. MKV accepts nearly everything, so it is the fallback when a remux fails.
Start and End take HH:MM:SS or plain seconds. Leave either blank to run from the beginning or to the end. Trimming before a heavy encode saves a lot of waiting.
Normalize loudness targets -16 LUFS, which is the usual level for web video and podcasts. It analyzes and corrects in one pass, so it is approximate but close. The fixed boost and cut options are simple gain changes.
Give a ceiling and AVPrep works backwards. It takes the duration, converts your target into a total bitrate, reserves what you asked for the audio, and hands the rest to the video. The readout shows the arithmetic before you commit:
target bytes x 8 x 0.965 / duration = total kbps total kbps - audio kbps = video kbps
The 0.965 is headroom for container overhead and the fact that a rate-controlled encoder lands near its target rather than exactly on it.
A bitrate that is fine at 480p looks like mud at 1080p. On auto, AVPrep picks a height that suits the bitrate it calculated, and it never upscales past the source. Override it if you have a reason.
Leave "Re-encode automatically if the first pass overshoots" on and AVPrep checks the finished size. If it came in over the ceiling it recalculates and runs again at a lower bitrate, up to two extra passes. That costs time but it is the reliable way to actually land under a hard limit.
If the math leaves under about 60 kbps for video, the readout turns red and you get a confirmation prompt. At that point the useful moves are: raise the ceiling, drop the audio to 48 or 32 kbps, check the mono box, trim the clip on the Convert tab first, or give up on video and use the audio-only checkbox.
For a file with no video, or with the audio-only box checked, AVPrep skips the video math entirely and snaps to the nearest standard MP3 bitrate at or below the budget.
Reads the container, duration, overall bitrate, and every stream: codec, resolution, frame rate, sample rate, channel layout, per-stream bitrate, pixel format, and language. Below that it lists every tag the file carries. Nothing is written.
Inspect also fills in the duration used by the Shrink tab. If a file shows an unknown duration there, inspect it first.
The editor exposes the tags people actually use: title, artist, album, album artist, composer, track, disc, date, genre, comment, description, synopsis, copyright, publisher, language, encoded by, show, episode id, location, performer, and lyricist. Any tag already on the file that is not in that list shows up as a custom row, and you can add your own with Add a custom tag.
Write tags to a new file copies the streams through untouched. The audio and video are bit-for-bit identical to the source and the job takes seconds, not minutes. The output keeps the original extension and gets a -tagged suffix.
Removes every tag and writes a clean copy with a -clean suffix. Worth doing before you publish a file that came off a phone or a camera, since those carry device names, software versions, and sometimes location.
Writes whatever is currently in the editor onto all queued files. Good for stamping copyright, publisher, and year across a batch. It writes only the fields that have a value, and blank fields are left out rather than blanked on the target.
Saves the editor contents as an FFmetadata file. You can keep it as a record of what a file carried, or feed it to FFmpeg directly:
ffmpeg -i input.mp4 -i tags.txt -map_metadata 1 -c copy output.mp4
The Images tab strips or rewrites the hidden data inside photos and graphics, in bulk. It reads JPG, PNG, WebP, GIF and SVG. It does not use the FFmpeg engine, so nothing has to load first.
Drop in as many images as you like. Each row gets labels for what it carries. Red means it can identify you or a place: Location (GPS or a place name) and Serial number (ties every photo to one camera). Yellow means worth removing: camera, date, comments, thumbnails and hidden extras. Click a row to see every field, and if it has a location, a link to that spot on a map.
AI image tools often write the whole prompt into a PNG comment. That shows up under Comments.
The copyright notice has two ready versions with the current year: Advocacy (sharing allowed if unaltered and credited) and Protected (all rights reserved). Pick Custom to write your own. Your author, website and notice are remembered in this browser for next time.
Cleaning edits the file's data blocks directly and never re-encodes. A cleaned JPG has exactly the same pixels as the original, with no quality loss. After every file, the tool reads the result back and reports what it found. Clean. Verified no personal data. means it checked. A red Location still present means do not publish that file.
These re-draw the picture into a new JPG, PNG or WebP file, which drops all metadata as a side effect. Tick Add my details to write your author and copyright onto the new files. Shrink lowers quality step by step until the file fits the target, and scales the picture down if quality alone cannot get there. Animated GIFs keep only the first frame.
The engine is a single-threaded WebAssembly build, so it is slower than desktop FFmpeg by a wide margin. Rough expectations on a normal laptop:
| Job | Roughly |
|---|---|
| Remux, or writing metadata | Seconds. No re-encoding happens. |
| Audio conversion | Much faster than real time. |
| H.264 480p or 720p | Around real time, give or take. |
| H.264 1080p | One and a half to three times the clip length. |
| VP8 for WebM | Around real time to twice the clip length. |
| H.265 | Thirty to eighty times the clip length. A twenty second clip can take half an hour. Fine for an archive copy, wrong for a deadline. |
Those multiples are measured against a 720p source on an ordinary laptop, and they scale with resolution. Downscaling first is usually the single biggest saving.
Encoder speed changes this a lot. Ultrafast finishes soonest and produces the largest file at a given CRF. Very fast is the default here because it is a reasonable trade. Medium is worth it only for something you will keep.
| Container | Video codecs | Audio codecs |
|---|---|---|
| MP4 | H.264, H.265, copy | AAC, MP3, copy |
| MKV | H.264, H.265, VP8, copy | AAC, MP3, Opus, Vorbis, FLAC, copy |
| WebM | VP8 | Opus, Vorbis |
| MOV | H.264, copy | AAC, PCM, copy |
| GIF | Palette generated per clip | None |
| MP3 | — | MP3 |
| M4A | — | AAC, copy |
| WAV | — | PCM 16-bit, PCM 24-bit |
| FLAC | — | FLAC |
| OGG | — | Vorbis |
| Opus | — | Opus |
Reading is wider than writing. The engine decodes most things you are likely to have, including AVI, WMV, MPEG-TS, ProRes, Theora, and AIFF, even where it cannot write them back out.
It comes from /journal_tools/videostudio/ffmpeg/ on this same site. A blocked script, an aggressive privacy extension, or an offline moment will stop it. Reload and press Load engine, and watch the log panel at the bottom.
Usually a remux into a container that will not hold those streams. Switch the codecs off "copy" so it re-encodes, or target MKV.
Check that the audio codec is not set to something the container rejects, and look for a red line in the log naming the stream. Converting to MKV first will tell you whether the audio track survives at all.
Some containers refuse an exact stream copy when the file carries subtitles, chapters, or attachments. AVPrep already retries with narrower stream mappings before giving up. If all three attempts fail, convert to MKV on the Convert tab, then tag that.
Turn on automatic refinement. Very short clips are the hard case, because container overhead is a large fraction of a small file. Set the ceiling a couple of megabytes under the real limit and it will clear.
The percentage comes from FFmpeg's own timing, which is unavailable for a few operations such as palette generation for GIF. The log keeps moving even when the bar does not. If the log is also frozen for several minutes on a large file, it is probably a memory problem.