Convert SWF to 3G2 — Free Online Tool

Convert SWF Flash animations and multimedia files to 3G2 format, re-encoding the FLV1 or MJPEG video stream to H.264 (libx264) and the MP3 audio to AAC — making legacy Flash content playable on CDMA mobile devices and modern media players that no longer support Adobe Flash.

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 files typically carry video encoded in FLV1 (Sorenson Spark) or MJPEG alongside MP3 audio. Since neither of these codecs is compatible with the 3G2 container, this conversion requires full re-encoding of both streams: the video is transcoded to H.264 using libx264 with a CRF of 23 (a perceptually high-quality setting), and the audio is transcoded from MP3 to AAC at 128k bitrate. AAC is the standard audio codec for 3GPP2 and delivers better quality-per-bit than MP3 at mobile-friendly bitrates. The -movflags +faststart flag rearranges the MP4-family metadata so the 3G2 file can begin playback before fully downloading — important for streaming over CDMA networks. Because SWF can contain interactive vector graphics and ActionScript logic, only the embedded rasterized video and audio streams are extracted; interactivity is not preserved.

What Each Flag Does

Flag What it does
ffmpeg Invokes the FFmpeg binary — the open-source multimedia processing engine that powers this conversion entirely within your browser via WebAssembly (FFmpeg.wasm), with no server upload required.
-i input.swf Specifies the input SWF file. FFmpeg's SWF demuxer parses the file structure to locate and extract the embedded video (typically FLV1) and audio (typically MP3) streams, ignoring vector graphics and ActionScript.
-c:v libx264 Re-encodes the video stream using the H.264 encoder (libx264), replacing the original FLV1 (Sorenson Spark) codec with a modern, widely supported format compatible with the 3G2 container and virtually all mobile devices.
-c:a aac Re-encodes the audio stream to AAC, transcoding from the SWF's native MP3 audio. AAC is the standard codec for 3GPP2/3G2 files and provides better audio quality than MP3 at equivalent bitrates for mobile streaming.
-crf 23 Sets the H.264 Constant Rate Factor to 23, the libx264 default, which delivers perceptually good quality at an efficient file size. For Flash video originally encoded in lossy FLV1, this avoids unnecessary bitrate bloat while maintaining visual fidelity.
-b:a 128k Targets an AAC audio bitrate of 128 kilobits per second — a standard quality level for mobile audio that matches common MP3 bitrates used in SWF files, keeping file size consistent while benefiting from AAC's superior compression efficiency.
-movflags +faststart Moves the 3G2 file's moov metadata atom to the beginning of the file after encoding, enabling progressive playback over CDMA networks — the 3G2 format's primary use case — so playback can begin before the full file is downloaded.
output.3g2 Defines the output filename and container format. The .3g2 extension signals FFmpeg to use the 3GPP2 muxer, producing a file structured for CDMA mobile network compatibility with H.264 video and AAC audio streams.

Common Use Cases

  • Archiving old Flash-based web animations or video clips from the pre-HTML5 era into a mobile-compatible format that plays without Adobe Flash Player
  • Converting Flash video content (e.g., embedded FLV1-encoded clips inside SWF) for playback on legacy CDMA phones or 3GPP2-compatible media players
  • Preparing SWF-wrapped video tutorials or training materials for distribution on mobile networks where 3G2's low-bitrate efficiency reduces data usage
  • Extracting and re-encoding the video/audio from SWF game cutscenes or intro sequences into a shareable, universally playable 3G2 file
  • Recovering video content from SWF files for use in video editing workflows that accept H.264/AAC in a 3G2 or MP4-family container

Frequently Asked Questions

No. 3G2 is a passive video container and has no concept of ActionScript, vector animation timelines, or interactivity. Only the raw video and audio streams embedded inside the SWF are extracted and re-encoded. If the SWF contains pure vector animation without a pre-rendered video track, FFmpeg may produce a static frame or a very short output, since there is no conventional video stream to decode.
SWF commonly uses MP3 (libmp3lame) as its audio codec, but the 3G2 format was designed around the 3GPP2 mobile standard, which specifies AAC as its preferred audio codec. AAC achieves better audio quality than MP3 at the same bitrate — particularly at mobile-friendly rates like 128k — making it a practical upgrade for mobile distribution. The conversion re-encodes the audio stream to AAC automatically.
It depends heavily on the SWF content. SWF files that store video as FLV1 (Sorenson Spark) are typically larger than the equivalent H.264-encoded output, since H.264 offers significantly better compression efficiency. However, if the SWF contained primarily vector-based animation that FFmpeg rasterizes during decoding, the output size could vary unpredictably. Audio transcoding from MP3 to AAC at the same 128k bitrate will have a negligible size impact.
CRF (Constant Rate Factor) controls H.264 quality in libx264. A value of 23 is the default and represents a good balance between visual quality and file size — roughly equivalent to perceptually transparent quality for most content. Lower CRF values (e.g., 18) produce higher quality at larger file sizes, while higher values (e.g., 28-35) trade quality for smaller files. For Flash video content that was already lossy-encoded as FLV1, going below CRF 18 will not recover detail that was lost in the original encoding.
To adjust video quality, change the -crf value: use a number between 0 and 51, where lower is higher quality (e.g., replace '23' with '18' for better quality, or '28' for a smaller file). To change audio bitrate, replace '128k' after -b:a with your target rate such as '96k' for smaller files or '192k' for better audio fidelity. For example: ffmpeg -i input.swf -c:v libx264 -c:a aac -crf 18 -b:a 192k -movflags +faststart output.3g2
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 -movflags +faststart "${f%.swf}.3g2"; 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 -movflags +faststart "%~nf.3g2". This is particularly useful when archiving a collection of legacy Flash files, and it's one reason the FFmpeg command is displayed on this page — for processing large batches or files over 1GB locally.

Technical Notes

SWF is a compound format that can contain vector graphics, ActionScript bytecode, bitmaps, and optionally embedded video (typically FLV1/Sorenson Spark) and audio (MP3). FFmpeg's SWF demuxer extracts only the embedded AV streams and cannot interpret vector animation or interactivity, so output quality is entirely dependent on what pre-rendered video data exists within the SWF. The 3G2 container is a close relative of MP4 (both derive from the ISO Base Media File Format), which is why the -movflags +faststart flag — normally associated with MP4 — applies here as well; it moves the moov atom to the front of the file for progressive download. H.264 encoded with libx264 at CRF 23 will generally outperform the original FLV1 encoding in compression efficiency, but since FLV1 is already lossy, the conversion represents a second generation of lossy compression and cannot restore detail lost in the original. Metadata such as Flash-specific tags, frame labels, and ActionScript variables are not transferable to 3G2 and will be discarded. Neither SWF nor 3G2 supports transparency (alpha channel), subtitles, chapters, or multiple audio tracks in this conversion pipeline, so no data of those types will be lost or need special handling.

Related Tools