Video & Audio Converter


Drop a video or audio file here, or click to browse

MP4 · WebM · MKV · MOV · MP3 · WAV · OGG · FLAC · and more

How It Works

This tool converts video and audio files entirely inside your browser using Mediabunny, a zero-dependency TypeScript library that handles container multiplexing / demultiplexing and codec encoding / decoding via the browser’s built-in WebCodecs API. Your files never leave your device.

Supported Input Formats

MP4, MOV, WebM, MKV, MP3, WAV, OGG, FLAC, ADTS, MPEG-TS — and any other container Mediabunny can demux.

Supported Output Formats
FormatExtensionBest for
MP4.mp4Universal video — widest device & browser support
WebM.webmWeb video — open format, great compression
MKV.mkvHigh quality video with multiple tracks
MOV.movApple QuickTime video
MP3.mp3Compressed audio — small files, universal support
WAV.wavUncompressed audio — lossless, large files
OGG.oggOpen-source compressed audio
FLAC.flacLossless compressed audio
Options
OptionDescription
Output FormatChoose the target container format. Audio-only formats (MP3, WAV, OGG, FLAC) automatically discard the video track.
Extract audio onlyWhen selected for a video-capable output format, the video track is discarded and only the audio stream is written.
Limit max widthScales the video down proportionally so that its width does not exceed the specified pixel value. The aspect ratio is preserved.
Implementation Details

Mediabunny is a pure TypeScript library with zero dependencies. It transmuxes or transcodes using WebCodecs when the source codec is not directly supported by the output container. In many cases (e.g. MP4 → WebM with VP8/VP9 source), the conversion is a fast transmux with no re-encoding.

Processing steps:

  1. The file is wrapped in a BlobSource (lazy streaming reads — never fully buffered).
  2. Input probes the container format and exposes track metadata.
  3. Output is configured with the chosen output format and a BufferTarget.
  4. Conversion.init() analyses the tracks, decides whether to transmux or transcode, and optionally sets up a resize pipeline.
  5. conversion.execute() streams the conversion, calling onProgress at each step.
  6. On completion the in-memory buffer is wrapped in a Blob for download.
Privacy

All processing runs locally in your browser tab. No file data or metadata is ever sent to any server.