Convert SWF to FLV — Free Online Tool

Convert SWF (Shockwave Flash) files to FLV (Flash Video) format, re-encoding the video stream from FLV1 or MJPEG to H.264 via libx264, giving you a more widely compatible and efficiently compressed Flash video container. This is especially useful for extracting and preserving video content from legacy SWF animations or interactive Flash presentations before browsers and platforms fully dropped Flash support.

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

SWF is a rich multimedia container that bundles vector graphics, ActionScript, animation timelines, and embedded video (typically encoded with the FLV1 Sorenson Spark codec or MJPEG) along with audio encoded in MP3 or AAC. During this conversion, FFmpeg demuxes the SWF file to extract the embedded video and audio streams, then re-encodes the video using libx264 (H.264), which offers significantly better compression and broader compatibility than the legacy FLV1 codec found in most SWF files. The audio is transcoded to AAC at 128k bitrate. The resulting FLV container holds the H.264 video and AAC audio — a format that Flash Media Server and many video players still recognize — but note that interactive elements, ActionScript logic, vector animations, and layered timeline data from the original SWF cannot be preserved, as FLV only supports linear video and audio streams.

What Each Flag Does

Flag What it does
ffmpeg Invokes the FFmpeg command-line tool. In the browser version of this tool, the same logic runs via FFmpeg.wasm compiled to WebAssembly, so no server or local installation is needed.
-i input.swf Specifies the input SWF file. FFmpeg's SWF demuxer will attempt to locate and extract embedded video (FLV1 or MJPEG) and audio (MP3 or AAC) streams from the SWF container, ignoring vector graphics and ActionScript.
-c:v libx264 Re-encodes the extracted video stream using the libx264 H.264 encoder, upgrading from the legacy FLV1 (Sorenson Spark) codec typically found in SWF files to the far more efficient and widely supported H.264 standard, while keeping the FLV container.
-c:a aac Transcodes the audio stream to AAC, which is the standard audio codec for H.264-based FLV files and is supported by Flash Player 9.0.115 and later. If the source SWF audio was MP3, this step converts it to AAC.
-crf 23 Sets the Constant Rate Factor for the libx264 encoder to 23, which is the FFmpeg default and produces a balanced trade-off between visual quality and file size. Lower values (e.g., 18) yield higher quality FLV output at the cost of larger files.
-b:a 128k Sets the AAC audio bitrate to 128 kilobits per second, which is a standard quality level for voice and general-purpose audio in Flash video delivery and matches the typical audio quality found in SWF-embedded audio.
output.flv Defines the output filename and tells FFmpeg to write the re-encoded H.264 video and AAC audio into an FLV (Flash Video) container, the format historically used for internet video delivery via Adobe Flash Player.

Common Use Cases

  • Archiving embedded video clips from legacy Flash-based e-learning modules before the content becomes permanently inaccessible due to Flash End-of-Life
  • Extracting a linear video recording embedded within an interactive SWF product demo so it can be hosted on a Flash-era streaming server or CDN that expects FLV files
  • Recovering promotional video content originally distributed as SWF files for websites built during the Flash era, converting to FLV for re-editing in video production tools that support FLV input
  • Migrating Flash-based video lectures or recorded webinars from SWF to FLV so they can be ingested into older Flash Media Server or Wowza streaming infrastructure
  • Converting SWF animation exports that contain linear video segments to FLV for use as video overlays in legacy broadcast or kiosk software that accepts FLV but not SWF
  • Batch-processing a library of SWF files from an archived Flash website to FLV as an intermediate step before further transcoding to modern formats like MP4

Frequently Asked Questions

No — FLV is a linear video container and has no capability to store ActionScript, interactivity, button states, vector animation timelines, or any programmatic elements from the SWF. FFmpeg can only extract and re-encode the raw video and audio streams embedded within the SWF. If your SWF is purely vector-animated or script-driven with no embedded video, the output FLV may contain little to no usable content.
The FLV container actually supports both the older FLV1 (Sorenson Spark) codec and the modern H.264 codec. FFmpeg defaults to libx264 for FLV output because H.264 delivers dramatically better quality at the same file size compared to FLV1, and it is supported by all Flash Player versions 9.0.115 and later. Using libx264 makes the output more practical for any downstream use while staying within the FLV container format.
The -crf flag controls quality for the libx264 encoder using a scale from 0 (lossless) to 51 (worst quality), with 23 as the default. Lower CRF values mean higher quality and larger file sizes. For example, replacing '-crf 23' with '-crf 18' will produce noticeably sharper video at the cost of a larger FLV file, while '-crf 28' will reduce file size with some visible quality loss. You can also increase audio bitrate by changing '-b:a 128k' to '-b:a 192k' or '-b:a 256k' for better audio fidelity.
This depends heavily on the SWF content type. SWF files with mostly vector graphics and ActionScript tend to be very small, and the FLV output may actually be larger because FFmpeg is encoding a rasterized video stream rather than compact vector instructions. SWF files with embedded video already encoded in FLV1 will likely produce an FLV of similar or slightly smaller size thanks to H.264's superior compression. The default CRF 23 setting is designed to balance quality and file size for typical web video.
Yes. On Linux or macOS you can use a shell loop: 'for f in *.swf; do ffmpeg -i "$f" -c:v libx264 -c:a aac -crf 23 -b:a 128k "${f%.swf}.flv"; done'. On Windows Command Prompt, use: 'for %f in (*.swf) do ffmpeg -i "%f" -c:v libx264 -c:a aac -crf 23 -b:a 128k "%~nf.flv"'. The in-browser tool processes one file at a time, so the FFmpeg command is particularly valuable for batch processing large collections of archived SWF files.
If the SWF contains purely vector-based Flash animation driven by ActionScript with no embedded raster video stream, FFmpeg may produce an FLV with a very short or empty video track, or may report an error finding a suitable video stream. FFmpeg cannot render or rasterize SWF vector animations — it can only extract streams that are already encoded as video. In this case, a screen recording tool like OBS or a dedicated SWF renderer would be a better approach to capture the animation as a video file.

Technical Notes

SWF files present a unique extraction challenge because the format was designed as a delivery container for interactive multimedia rather than a straightforward video wrapper. FFmpeg's SWF demuxer can read embedded FLV1 (Sorenson Spark H.263-based), MJPEG video streams, and MP3 or AAC audio tracks, but it does not interpret or render the SWF timeline, vector shapes, or ActionScript. The re-encoding step from FLV1 to H.264 (libx264) introduces a generation of lossy compression on top of the already-lossy source, so it is worth using a lower CRF (e.g., 18–20) if quality preservation is critical. The FLV container itself does not support subtitles, chapters, or multiple audio tracks, matching the SWF source's limitations in those areas. Neither format supports transparency in the video stream, so any alpha channel information in SWF vector layers is lost. The output FLV uses the standard Flash-compatible stream structure with AAC audio, which is compatible with Flash Player 9.0.115+ and most FLV-capable players and servers. Metadata such as frame rate and duration should be preserved from the source stream where FFmpeg can read them, but SWF-specific metadata (author, ActionScript version, stage dimensions) is not carried over to the FLV container.

Related Tools