gizmobench

Video Converter

This converter turns WebM into MP4, MP4 into WebM and an animated GIF into a video inside your browser tab, with the codecs your browser already has, so the file is never uploaded. Before anything is encoded it reads the file's first bytes and its tracks, asks your browser whether it can decode the source and encode the codec you chose at that exact size, and refuses with the reason when it cannot: an AVI or MPG is named and turned away at once, and a different codec is never quietly written under the name you picked. A stream the new file can already hold, kept at its own size, is copied rather than re-encoded, so an H.264 MOV becomes an MP4 without its picture being touched. A GIF is decoded by the page itself, with every frame's own delay and its disposal kept, delays of 0 and 10 ms played as 100 ms as browsers show them, and a choice of how many times it plays and which colour sits behind its transparent parts. When the work ends, the new file's first bytes are checked against its extension, then it is read back: its codecs and size must match the plan, and its length and the start of its sound are measured against the source, with the result saying whether each lands within one frame.

Open a video or an animated GIF

· or drop one anywhere on the stage

Never uploadedNo accountUp to 250 MBReads MP4, MOV, WebM, MKV and GIF
Output
Codec
Size
Audio
Download

Ready. Choose a video or an animated GIF, or drop one on the stage.

  • Three-frame GIF, delays 100, 200 and 300 msGIF to MP4, played once
    0.600 s long, frames start at 0.000, 0.100 and 0.300 s
  • WebM with VP9 video and Opus audioto MP4
    H.264 + AAC, the AAC encoder's start-up delay measured and skipped, audio start checked to one frame, 33.3 ms at 30 fps
  • An AVI, an MPG, or a codec this browser cannot encodechecked before any work
    refused with the reason; nothing is converted or uploaded

Output picks the file: an MP4 is written with H.264, HEVC or AV1 video, and a WebM with VP9, VP8 or AV1. A stream whose codec the new file already holds, kept at its own size, is copied without re-encoding, so an H.264 MOV becomes an MP4 with its picture untouched; anything else is decoded and encoded again by your browser at a high quality bitrate chosen for its size. Sound is copied where the format holds it (AAC or MP3 in an MP4, Opus or Vorbis in a WebM) and re-encoded at 128 kbps otherwise. Size brings the shorter side down to the number of pixels chosen and never enlarges. A GIF keeps each frame's own delay and its disposal, plays through as many times as Plays says, and gets the Behind colour where it is transparent, because a video has no transparency. When the work ends, the file's first bytes are checked against its extension, then it is read back: its codecs and size must match the plan or it is not offered, and its length and the start of its sound are measured against the source.

Accuracy. Re-encodes only with codecs your browser can decode and encode, copies a stream untouched only where the new format already holds it, and refuses a file or codec it cannot handle, AVI and MPG included, with the reason before any work starts, never sending it to a server. Animated GIF frame timing and disposal are kept, with delays of 0 and 10 ms played as 100 ms as browsers show them, and every finished file is read back: its first bytes must match its extension, and its length and the start of its sound are measured against the source, with the result saying whether each lands within one frame. Files up to 250 MB are converted on your device, and a re-encoded video is close to the original rather than identical to it.
The encoding is done by your browser, and the file handling by one open source library served from this site. Containers are read and written by Mediabunny 1.55.7 under the MPL-2.0 (licence text, the exact package, source), bundled unmodified. Video and sound are decoded and encoded by the WebCodecs codecs built into your browser, which is why the codecs on offer depend on it. GIFs are decoded by this page itself.

Common questions

How do I convert a WebM to MP4?
Open the WebM, leave Output on MP4 and Codec on H.264, and press Convert. The VP9, VP8 or AV1 picture inside the WebM is decoded and encoded again as H.264, and Opus or Vorbis sound is re-encoded as AAC at 128 kbps, with at most two channels, because an MP4 written here carries AAC. An AAC encoder puts a short start-up delay in front of the sound, so the page measures your browser's delay first and writes an edit list into the MP4 telling players to skip it. When it ends, the page checks that bytes 4 to 7 of the new file read ftyp, the mark of an MP4, then reads the file back and compares its length and the start of its sound with the WebM's. For a 30 fps recording one frame is 33.3 ms, and the result says whether each lands within that. If the WebM's picture is AV1, choosing AV1 under MP4 at the Original size copies it into the MP4 as it is, without re-encoding.
Is my video uploaded anywhere?
No. The file is read in this tab, the picture and sound are decoded and encoded by the WebCodecs codecs built into your browser, and the new file is assembled here and handed to your browser's download. Nothing is sent to a server and no account is needed. The page remembers only its own settings in this browser: the output format, the codec chosen for each format, the size, the audio choice, and for GIFs how many times it plays and the colour behind it. The Start over button at the top of the page forgets them. The video itself is never stored.
Which files can it convert?
MP4, MOV, WebM, MKV and MPEG-TS videos up to 250 MB, and animated GIFs up to 250 MB and 500,000 frames whose picture is at most 67,108,864 pixels, the area of 8192 x 8192. A GIF that declares a larger picture is refused with its size before any frame is drawn, so resize it in an image editor first. The container is recognised from the file's first bytes rather than its name, so an AVI, an MPG, an FLV or a WMV is refused straight away with a message naming what it is, before anything else is loaded, and a sound-only file is pointed to the Audio Converter. A still image, or a GIF with a single frame, is refused because nothing in it moves. The video inside is then checked with your browser: re-encoding needs a decoder for its codec, so if your browser cannot decode, say, the HEVC many phones record, the message says so and, where the format allows, points you to MP4 with HEVC at the Original size, which repackages the video without decoding it.
Why does it say my browser cannot write this codec?
The encoding is done by your browser, and browsers differ in which encoders they ship. Before the Convert button is enabled, the page asks your browser whether it can encode the chosen codec at the exact output size, and codecs it cannot are struck through on the buttons. The message names the codecs in that format your browser can write, or suggests the other format or a smaller size when none can. The same goes for sound: if your browser has no AAC encoder, re-encoded sound cannot go in an MP4, and the page offers WebM with Opus sound, or Remove audio. It never writes a different codec in place of the one you chose, and nothing is sent anywhere else to do the encoding.
Does a GIF keep its timing when it becomes a video?
Yes. Each frame is held for its own delay, so a three-frame GIF with delays of 100, 200 and 300 ms becomes a 0.600 s video whose frames start at 0.000, 0.100 and 0.300 s. A delay stored as 0 or 10 ms plays as 100 ms, the way browsers show it, so the video lasts as long as the GIF appears to. Disposal is applied as browsers apply it: a frame set to clear its area is cleared before the next frame is drawn, and one set to restore has what was under it put back. A video file cannot tell a player to loop the way a GIF's loop block does, so Plays sets how many times the animation runs through in the file: once, 2, 3 or 5 times. A finished video holds at most 500,000 frames, counting every play, so a GIF with more frames than that is refused, and one that would pass it when repeated is refused with the largest number of plays that fits. The video this page writes has no transparency, so transparent pixels get the Behind colour, white or black.
Will the sound stay in sync?
The new file is read back and the start of its sound is measured against the start of its picture, then compared with the same gap in the original. Sound re-encoded as AAC for an MP4 needs one more step: an AAC encoder puts a start-up delay of silence in front of the sound (2112 samples, 44 ms at 48 kHz, in Chrome on a Mac) while the file's timestamps still start at 0. So the page first sends a short test sweep through your browser's AAC encoder and back to measure that delay, then writes an edit list into the MP4 telling players to skip it, and the check counts the delay, so a file that would still start late says so. When the difference is no more than one frame, which is 33.3 ms at 30 fps, the result says the sound starts within one frame. When it is more, the result gives the difference in milliseconds rather than calling it in sync, and if the delay could not be measured the result says the start was not checked. Opus sound in a WebM carries its own start-up delay in its header, which players apply. Sound that the new format can hold as it is, AAC or MP3 in an MP4 and Opus or Vorbis in a WebM, is copied untouched when it starts at or after the beginning of the file; other sound is re-encoded at 128 kbps.
Is converting WebM to MP4 lossless?
Only where nothing has to be re-encoded. A stream whose codec the new file can hold, kept at its original size, is copied packet for packet: an H.264 MOV into an MP4, or AV1 from a WebM into an MP4 with AV1 chosen. A VP9 WebM becoming an H.264 MP4 is decoded and encoded again at a high quality bitrate chosen for its size, so it looks close to the original without being identical, and the new file can come out larger or smaller. Its size is measured and shown when it ends, next to the length and the first-bytes check.
Can I stop a conversion partway through?
Yes. Cancel stops the conversion, closes the encoders and throws away what had been written, and no download appears: a cancel that lands just as the last frame finishes still discards the result. The file stays open with your settings as they were, so you can change the codec or the size and convert again without choosing the file a second time.
Why is there a 250 MB limit on a tool that runs on my own computer?
Because the new file is assembled in this tab's memory before it is handed to your download, and a GIF is read into memory whole so its frames can be decoded. The bound is there so the tab does not run out of memory partway through a long conversion, not to sell anything: there is nothing to buy here. For a larger video, cut it into parts first and convert them one at a time.

Re-encodes only with codecs your browser can decode and encode, copies a stream untouched only where the new format already holds it, and refuses a file or codec it cannot handle, AVI and MPG included, with the reason before any work starts, never sending it to a server. Animated GIF frame timing and disposal are kept, with delays of 0 and 10 ms played as 100 ms as browsers show them, and every finished file is read back: its first bytes must match its extension, and its length and the start of its sound are measured against the source, with the result saying whether each lands within one frame. Files up to 250 MB are converted on your device, and a re-encoded video is close to the original rather than identical to it.