Convert FLV to WebM — Free Online Tool

Convert FLV files to WebM using VP9 video and Opus audio — two modern, royalty-free codecs that deliver excellent compression efficiency and are natively supported in all major HTML5 browsers. This tool runs entirely in your browser via WebAssembly, so your Flash-era video files never leave your device.

FFmpeg Command

Copy this command to run the same conversion locally with FFmpeg on your desktop. Download FFmpeg

Free — no uploads, no signups. Your files never leave your browser.

Estimated output:

Conversion Complete!

Download

How It Works

FLV files typically carry H.264 (libx264) video and AAC audio — codecs that are effective but encumbered by licensing and not natively supported in all open-web contexts. During this conversion, the H.264 video stream is fully re-encoded into VP9 using the libvpx-vp9 encoder, and the AAC audio stream is transcoded into Opus using libopus. Neither stream can simply be copied (remuxed) because WebM only accepts VP9 (or VP8/AV1) video and Opus or Vorbis audio — making this a full transcode operation. The VP9 encoder uses a constrained-quality mode (CRF 33 with -b:v 0) which targets perceptual quality rather than a fixed bitrate, often producing smaller files than the original FLV at comparable visual quality.

What Each Flag Does

Flag What it does
ffmpeg Invokes the FFmpeg binary — the open-source multimedia processing engine that handles all decoding, encoding, and container muxing for this FLV-to-WebM conversion.
-i input.flv Specifies the input Flash Video file. FFmpeg will probe the FLV container to detect the video codec (typically H.264 or Sorenson Spark) and audio codec (typically AAC or MP3) before beginning the transcode pipeline.
-c:v libvpx-vp9 Re-encodes the video stream using the libvpx-vp9 encoder, replacing the H.264 (or other FLV video codec) with VP9 — a royalty-free codec required by the WebM container and natively supported in Chrome, Firefox, Edge, and modern Safari.
-c:a libopus Transcodes the audio stream from AAC (or MP3, as found in FLV) to Opus using the libopus encoder — the preferred audio codec for WebM, known for superior efficiency compared to AAC, especially at bitrates of 128k and below.
-crf 33 Sets the VP9 Constant Rate Factor to 33, targeting a perceptual quality level rather than a fixed bitrate. For VP9, the CRF scale runs from 0 (lossless) to 63 (lowest quality); 33 is a balanced default for web video converted from lossy FLV sources.
-b:a 128k Sets the Opus audio bitrate to 128 kilobits per second. Opus at 128k delivers transparent or near-transparent audio quality for most speech and music content found in FLV recordings.
-b:v 0 Disables the video bitrate cap, which is required when using VP9 in CRF (constrained quality) mode. Without this flag, VP9 defaults to a very low bitrate cap that would override the CRF quality target and degrade the output.
output.webm Specifies the output filename with the .webm extension, which tells FFmpeg to mux the VP9 video and Opus audio streams into a WebM container — the open, Matroska-based format designed for HTML5 web delivery.

Common Use Cases

  • Modernizing archived Flash video content (FLV files from pre-2020 websites, YouTube downloads, or old streaming recordings) into a format playable without any plugins in current browsers.
  • Embedding legacy FLV footage directly into an HTML5 <video> tag using WebM's native browser support, without needing a JavaScript Flash shim or video.js workaround.
  • Reducing file size of FLV recordings from old screen-capture or live-streaming tools before uploading to a web CMS, since VP9 typically achieves 30–50% better compression than the H.264 used in most FLVs.
  • Preparing FLV content for platforms or workflows that require an open, royalty-free container format — such as Wikimedia Commons, which mandates WebM or Ogg for video uploads.
  • Converting FLV game recordings or tutorial videos originally captured with older software (like Camtasia 2010 or Fraps with FLV output) into a modern format for YouTube or Vimeo upload pipelines.
  • Extracting and re-encoding FLV content from legacy e-learning platforms into WebM for embedding in modern LMS systems that enforce HTML5-only playback.

Frequently Asked Questions

Because this conversion involves a full re-encode from H.264 to VP9, there is a small generational quality loss — the same content is being compressed twice. However, VP9 at CRF 33 is a perceptually high-quality setting, and for most FLV source files (which are already compressed at moderate bitrates), the output will look visually similar to the original. If your source FLV is high-quality, you can lower the CRF value toward 20–24 in the FFmpeg command for better fidelity at the cost of a larger file.
VP9 is a significantly more efficient codec than the H.264 or older FLV codec (Sorenson Spark) commonly found in FLV files. VP9 can achieve the same perceptual quality at roughly 30–50% lower bitrate than H.264, and Opus is more efficient than AAC at low-to-mid bitrates as well. If your FLV was encoded at a high bitrate, the VP9 encoder at CRF 33 will target a quality level rather than matching that bitrate, naturally producing a smaller output.
FLV has limited metadata support and does not support subtitles, chapters, or multiple audio tracks — and neither does this tool's FLV input handling. WebM (based on the Matroska container) does natively support subtitles, chapters, and multiple audio tracks, but since the source FLV lacks these features, the converted WebM will not gain them automatically. Basic metadata like duration and stream info will be preserved in the WebM container.
Safari on macOS added VP9/WebM support in Safari 14 (released 2020), and iOS Safari gained it in iOS 16. Older Safari versions do not support WebM at all. If you need broad cross-browser compatibility including older Apple devices, you may want to also keep an MP4 version alongside the WebM. For modern web deployments, using a <source> element with both WebM and MP4 fallback is the standard approach.
The -crf 33 flag controls VP9 video quality. Lower values produce higher quality and larger files — CRF 0 is lossless, while CRF 63 is the lowest quality. For high-quality archival of important FLV content, try -crf 20 or -crf 24. For web delivery where file size matters more, CRF 36–40 is acceptable for most content. Always keep the -b:v 0 flag alongside -crf when targeting quality mode, as it tells the VP9 encoder to ignore any bitrate cap and optimize purely for the CRF target.
Yes — on Linux or macOS, you can wrap the command in a shell loop: for f in *.flv; do ffmpeg -i "$f" -c:v libvpx-vp9 -c:a libopus -crf 33 -b:a 128k -b:v 0 "${f%.flv}.webm"; done. On Windows Command Prompt, use: for %f in (*.flv) do ffmpeg -i "%f" -c:v libvpx-vp9 -c:a libopus -crf 33 -b:a 128k -b:v 0 "%~nf.webm". Be aware that VP9 encoding is computationally intensive, so batch processing many large FLV files will take significant time.

Technical Notes

FLV (Flash Video) containers almost universally carry either H.264 video with AAC audio, or the older Sorenson Spark/VP6 codecs with MP3 audio — none of which are compatible with the WebM container. WebM strictly requires VP8, VP9, or AV1 for video, and Opus or Vorbis for audio, making a full transcode mandatory for this conversion. The libvpx-vp9 encoder is used in constrained-quality mode (CRF + -b:v 0), which is the recommended approach for file-based encoding — it differs from the two-pass mode used in strict bitrate-target scenarios. VP9 encoding is notably slower than H.264 encoding, so large FLV files will take longer to process than equivalent MP4-to-WebM conversions. The Opus audio codec at 128k offers audio quality roughly equivalent to AAC at 192k, making the audio transcode essentially transparent for most content. One key limitation: FLV does not support transparency, chapters, or subtitle tracks, so the WebM output will not utilize any of WebM's advanced container features. If the source FLV was encoded with the legacy FLV codec (Sorenson Spark) rather than H.264 — common in very old files — FFmpeg will still decode it correctly before re-encoding to VP9.

Related Tools