← Back to AVPrep

AVPrep

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.

Privacy: Files are never uploaded. The encoder is a WebAssembly build of FFmpeg that runs on your own machine, and output stays in browser memory until you download it.

Contents

Getting started

  1. Drop one or more files on the panel at the left, or click it to browse.
  2. Click a file in the queue to make it the selected file. Everything on the right acts on that file unless you use one of the "all queued" buttons.
  3. Pick a tab: Convert, Shrink to size, or Metadata.
  4. Run the job. Finished files appear under Output files with a Download button.

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.

Output lives in memory. Download anything you want to keep before you close or reload the tab. Your source files on disk are never modified.

Convert

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.

Presets worth knowing

PresetUse it for
Web MP4, H.264 720pThe safe default. Plays on every browser, phone, and CMS.
Web MP4, H.264 1080pFull detail for screen recordings or documents on camera.
Small MP4, H.264 480pQuick evidence clips and anything headed for a slow connection.
MP4, H.265Roughly 30 to 50 percent smaller at the same quality. Older players will refuse it.
WebM, VP8 and OpusOpen formats, good for embedding on a page.
Audio only, mono MP3 96kMeeting recordings and interviews. Tiny, and speech survives fine.
Audio only, FLACLossless archive copy of a master recording.
Remux to MP4 or MKVChange the wrapper without re-encoding. Instant, and quality is untouched.

Quality (CRF)

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.

Remux versus re-encode

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.

No VP9. The WebAssembly FFmpeg build on this site crashes a few frames into any VP9 encode, under every combination of speed and rate control. WebM output uses VP8 instead, which works. VP8 files run larger than VP9 at the same quality. If you need VP9 specifically, use a desktop FFmpeg.

Trim

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.

Volume adjust

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.

Shrink to size

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.

Resolution on auto

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.

Automatic refinement

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.

When the target is too small

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.

Audio-only files

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.

Metadata

Inspect

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.

Edit and write

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.

Custom tag names and containers. MP4 and M4A store non-standard tags through an Apple metadata atom, which AVPrep enables automatically. Some players ignore anything outside the standard set. MKV and MP3 are more forgiving. If a custom tag vanishes after a round trip, that is the container, not the tool.

Strip all metadata

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.

Apply to every queued file

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.

Export tags as text

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

Images

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.

See what a picture gives away

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.

Three ways to clean

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.

The picture is not touched

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.

Convert, resize and shrink

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.

What it cannot do

Speed and file size limits

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:

JobRoughly
Remux, or writing metadataSeconds. No re-encoding happens.
Audio conversionMuch faster than real time.
H.264 480p or 720pAround real time, give or take.
H.264 1080pOne and a half to three times the clip length.
VP8 for WebMAround real time to twice the clip length.
H.265Thirty 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.

Memory ceiling. The browser holds the input and the output in memory at once, and a 32-bit WebAssembly heap tops out around 2 GB in practice. Files under about 500 MB are comfortable. Past a gigabyte you may hit an out-of-memory error, and the fix is to trim the clip into parts first or use desktop FFmpeg.

Format reference

ContainerVideo codecsAudio codecs
MP4H.264, H.265, copyAAC, MP3, copy
MKVH.264, H.265, VP8, copyAAC, MP3, Opus, Vorbis, FLAC, copy
WebMVP8Opus, Vorbis
MOVH.264, copyAAC, PCM, copy
GIFPalette generated per clipNone
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.

Troubleshooting

The engine will not load

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.

The job fails right away with a codec complaint

Usually a remux into a container that will not hold those streams. Switch the codecs off "copy" so it re-encodes, or target MKV.

The output has no audio

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.

Writing tags produced no file

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.

The shrink came in over the target

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.

Progress sits at zero

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.