How it works
A repair bench for broken video formats
Video Mender exists for one job: taking video that will not play where you need it and producing video that will, without the file ever leaving your machine.
The engine
Processing runs on FFmpeg compiled to WebAssembly (core 0.12.10, wrapper 0.12.15), inside a Web Worker so the interface stays responsive while an encode is running. The engine is about 32 MB and is fetched only when you start your first job, from a version-stamped path on this domain rather than a CDN.
Where the browser is cross-origin isolated, the multi-threaded build is used. Safari and iOS get the single-threaded build, because SharedArrayBuffer support there is not dependable enough to rely on. That is slower and it is the correct trade: a working conversion beats a fast one that crashes.
WebCodecs is detected and used to reason about what your device can actually play, which informs the codec recommendations. Encoding uses the tested worker engine because browser-native WebCodecs would also require a dependable demuxer and muxer for every supported container.
Rewrap or re-encode
Every job is planned before it runs. If the video and audio inside your file are already legal in the target container, and you have not asked to change resolution, frame rate, bitrate or codec, the streams are copied across untouched. That is a rewrap: lossless, and fast enough that a gigabyte-scale file finishes in seconds.
If anything has to change, the file is decoded and encoded again. That is lossy and takes real time. The two paths are decided independently for video and audio, which is why AVCHD footage shows “video copied, audio re-encoded” — the picture is untouched while only the AC-3 track is converted to AAC.
The queue labels which path each file will take before you press start, and no job is reported finished until its output has been read back and its container and streams verified.
Formats
| Container | Read | Write | Notes |
|---|---|---|---|
| MP4 | Yes | Yes | The MPEG-4 Part 14 container. It is a wrapper, not a codec — an MP4 usually holds H.264 or HEVC video with AAC audio. |
| MOV | Yes | Yes | Apple QuickTime. Structurally a close cousin of MP4, which is why MOV files can often be rewrapped to MP4 with no re-encode. |
| MKV | Yes | Yes | Matroska. The most permissive common container: it will carry almost any codec, plus multiple audio tracks, chapters and subtitles. |
| WebM | Yes | Yes | A deliberately restricted Matroska profile for the web: VP8/VP9/AV1 video with Opus or Vorbis audio, and nothing else. |
| AVI | Yes | Yes | Microsoft Audio Video Interleave, from 1992. No native support for modern per-frame timing, B-frame handling is fragile, and the index sits at the end of the file. |
| WMV | Yes | No | Windows Media Video inside an ASF container. The video is normally WMV3/VC-1, which nothing outside the Microsoft stack decodes reliably. |
| M4V | Yes | Yes | Apple's MP4 variant used by iTunes. Byte-for-byte it is an MP4; the extension exists so iTunes can flag optional FairPlay DRM. |
| TS | Yes | No | MPEG transport stream: a broadcast and HLS format built for streams that can be joined mid-flow, so it has no single global header. |
| MTS / M2TS | Yes | No | AVCHD camcorder recordings — an MPEG transport stream with 192-byte timestamped packets instead of the usual 188. |
| VOB | Yes | No | DVD Video Object: an MPEG-2 program stream that also carries DVD menus, subtitle streams and multiple angles. |
| 3GP | Yes | Yes | The 3GPP mobile container from the pre-smartphone era. Same ISO base structure as MP4, usually holding low-resolution MPEG-4 video and AMR narrowband speech audio. |
| FLV | Yes | No | Flash Video. Flash Player reached end of life on 31 December 2020, so FLV files now need converting simply to stay watchable. |
Containers marked “no” for writing can be read and converted from, but never produced. Writing ASF, MPEG program streams or FLV from a browser would give files whose compatibility has not been proven, so those are input-only rather than offered and quietly unreliable.
Formats not published as their own page
The compressor accepts every container above. A dedicated route is only published when there is evidence it deserves one.
| Format | Status | Why |
|---|---|---|
| WMV | Works in the compressor | No approved low-KD compressor cluster for WMV; the conversion route carries that intent instead. |
| M4V | Works in the compressor | M4V is structurally MP4, so a separate compressor page would duplicate /video-compressor/ with no distinct demand evidence. |
| FLV | Works in the compressor | FLV intent is overwhelmingly conversion rather than compression; no approved compressor keywords exist. |
| 3GP | Works in the compressor | 3GP files are already tiny, so compression demand is negligible and no low-KD cluster was approved. |
| TS | Works in the compressor | No approved compressor cluster for transport streams; /ts-to-mp4/ serves the observed intent. |
| VOB | Works in the compressor | VOB intent is DVD conversion, covered by /vob-to-mp4/; no compressor keywords were approved. |
Compress any of these with the general video compressor. The same controls and processing engine apply to every format listed above.
Licences
Video Mender uses FFmpeg, licensed under the LGPL v2.1 or later. This build additionally links libx264 and libx265, which are GPL-licensed, along with libvpx, libmp3lame, libopus and libvorbis. FFmpeg is a project of the FFmpeg team and is not affiliated with this site.
Format names including MP4, MOV, QuickTime, Matroska, WebM, AVI, Windows Media and AVCHD are the property of their respective owners and are used here only to describe file formats.