Convert WebM to FLV — Free Online Tool
Convert WebM files to FLV by re-encoding the VP9 video stream to H.264 (libx264) and the Opus audio to AAC — making your content playable in legacy Adobe Flash-based players and older streaming infrastructure that never gained VP9 or Opus support.
to
FFmpeg Command
Copy this command to run the same conversion locally with FFmpeg on your desktop. Download FFmpeg
Drop your WebM file here
or click to browse
Free — no uploads, no signups. Your files never leave your browser.
Settings
Note: Browser-based encoding uses approximate quality targets. For precise CRF compression, copy the FFmpeg command above and run it on your desktop.
Estimated output:
Conversion Complete!
DownloadHow It Works
WebM uses VP9 video and Opus audio, neither of which is natively supported by the FLV container or Adobe Flash Player. This means a full re-encode is required for both streams — there is no fast remux path here. The VP9 video is decoded and re-encoded to H.264 using libx264 at CRF 23, which is a visually transparent quality level for most content. The Opus audio is simultaneously decoded and re-encoded to AAC at 128k bitrate, the standard lossy audio codec for FLV. The resulting file is wrapped in the FLV container, which uses a simpler structure than WebM's Matroska-derived format. Be aware that FLV does not support transparency, embedded subtitles, chapters, or multiple audio tracks — any of these present in the source WebM will be discarded during conversion.
What Each Flag Does
| Flag | What it does |
|---|---|
ffmpeg
|
Invokes the FFmpeg binary — the underlying engine performing the full decode-and-re-encode pipeline for this WebM-to-FLV conversion. In this tool, FFmpeg runs entirely in your browser via WebAssembly (FFmpeg.wasm). |
-i input.webm
|
Specifies the input WebM file containing VP9 video and Opus audio streams. FFmpeg reads the Matroska-based WebM container and demuxes the individual streams for re-encoding. |
-c:v libx264
|
Re-encodes the VP9 video stream to H.264 using the libx264 encoder, which is the only widely supported video codec for FLV. VP9 cannot be placed directly into an FLV container, so this full re-encode is mandatory. |
-c:a aac
|
Re-encodes the Opus audio stream to AAC using FFmpeg's built-in AAC encoder, which is the standard audio codec for FLV. Opus audio is not supported by the FLV container or Flash Player, making this re-encode required. |
-crf 23
|
Sets the Constant Rate Factor for the H.264 encode to 23, which is libx264's default and represents a good balance between visual quality and file size for web video. Lower values (e.g., 18) produce higher quality at larger file sizes; higher values (e.g., 28) compress more aggressively. |
-b:a 128k
|
Sets the AAC audio bitrate to 128 kilobits per second, which is a standard stereo quality level suitable for most speech and music content in FLV video files. Increase to 192k or 256k if audio fidelity is a priority. |
output.flv
|
Specifies the output filename and tells FFmpeg to wrap the H.264 video and AAC audio into the FLV container format. The .flv extension triggers FFmpeg's FLV muxer automatically. |
Common Use Cases
- Uploading video content to older streaming platforms or CDNs that were built around Flash-based video players and only accept FLV ingest
- Preparing WebM recordings for playback in legacy enterprise video systems (e.g., old LMS platforms or internal portals) that were built before HTML5 video became standard
- Converting WebM screen recordings or tutorial videos for use with legacy Flash-based e-learning authoring tools like older versions of Adobe Captivate or Articulate
- Archiving or migrating WebM content into FLV for compatibility with older video editing workflows or software that lacks VP9/Opus decoder support
- Re-encoding a WebM livestream recording for ingest into an RTMP-based server or Flash Media Server that expects FLV-wrapped H.264/AAC streams
- Testing how a VP9-encoded WebM looks when downgraded to H.264/AAC to evaluate quality loss before committing to a format migration for a large video library
Frequently Asked Questions
Yes, some quality loss is inevitable because both the VP9 video and Opus audio must be fully re-encoded — there is no lossless passthrough option into FLV. At the default CRF 23 for H.264 and 128k AAC, the quality degradation is generally subtle for most web video content, but it is measurable. If your source WebM was already heavily compressed, the re-encode will compound that loss. For the best results, always start from the highest-quality WebM available rather than converting a copy that was already lossy.
No. FLV with H.264 video has no support for an alpha transparency channel. If your WebM file contains a transparent background (using VP9's alpha plane support), that transparency will be permanently lost during conversion — the output FLV will render transparent areas as a solid color, typically black. If preserving transparency is essential, FLV is not a suitable target format.
They are dropped entirely. The FLV container does not support subtitle tracks or chapter metadata, so FFmpeg will simply ignore them during the conversion. If your WebM has embedded WebVTT or SSA subtitles, or chapter markers, you should export them separately before converting — for subtitles, use a separate FFmpeg pass with '-c:s' to extract them to a standalone subtitle file.
VP9 (WebM's default codec) is generally more efficient than H.264 at equivalent visual quality, meaning H.264 at CRF 23 often produces larger files than a well-encoded VP9 WebM at a comparable quality setting. Conversely, if the source WebM used a very low CRF (high bitrate) VP9 encode, the H.264 output at CRF 23 might be smaller. File size differences of 20–50% larger for the FLV are common when the WebM was efficiently encoded.
To change video quality, modify the '-crf' value: lower numbers (e.g., 18) mean higher quality and larger files, while higher numbers (e.g., 28) reduce quality and file size. For H.264 in FLV, the usable range is roughly 18–28 for good results. To change audio quality, replace '128k' in '-b:a 128k' with a higher value like '192k' or '256k' for better audio fidelity, or '96k' to reduce file size. For example: 'ffmpeg -i input.webm -c:v libx264 -c:a aac -crf 18 -b:a 192k output.flv'.
Yes. On Linux or macOS, you can use a shell loop: 'for f in *.webm; do ffmpeg -i "$f" -c:v libx264 -c:a aac -crf 23 -b:a 128k "${f%.webm}.flv"; done'. On Windows Command Prompt, use: 'for %f in (*.webm) do ffmpeg -i "%f" -c:v libx264 -c:a aac -crf 23 -b:a 128k "%~nf.flv"'. Each file is processed sequentially and saved as an FLV with the same base filename.
Technical Notes
The WebM-to-FLV conversion is one of the more codec-intensive paths because both the video and audio codecs are fundamentally incompatible between the two containers — VP9 and Opus cannot be carried in FLV, and H.264 and AAC cannot be carried in WebM. The libx264 encoder used here produces Baseline, Main, or High Profile H.264, and FLV players typically expect High Profile or lower. The AAC encoder in FFmpeg's native 'aac' codec is a reasonable default, though for higher-fidelity audio you could substitute 'libfdk_aac' if your FFmpeg build includes it. FLV has a practical video bitrate ceiling that older Flash players handle comfortably at around 4–8 Mbps for H.264, so extremely high-bitrate WebM sources should be fine. Note that FLV timestamps use a 32-bit millisecond counter, which means files longer than roughly 49.7 days will have timestamp overflow issues — not a practical concern for most content but worth noting for automated pipelines. Multiple audio tracks present in the WebM will be silently reduced to a single stereo (or mono) AAC track, with FFmpeg defaulting to the first audio stream. HDR metadata (if present in the WebM's VP9 stream) is not transferred to the H.264 output, which will be standard dynamic range.