Convert SWF to 3GPP — Free Online Tool

Convert SWF Flash files to 3GPP format for mobile playback, re-encoding the FLV1 or MJPEG video stream to H.264 (libx264) and the MP3 audio to AAC — the codecs required by 3G-compatible mobile devices. This is especially useful for preserving animated or multimedia Flash content that modern browsers can no longer play.

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 contain video encoded with the FLV1 (Sorenson Spark) codec and MP3 audio, wrapped in Adobe's Flash container. Because 3GPP uses a completely different codec baseline — H.264 video and AAC audio — this conversion requires full re-encoding of both streams, not a simple remux. FFmpeg decodes the FLV1 video and re-encodes it using libx264 with CRF-based quality control, then transcodes the MP3 audio to AAC at 64k bitrate. The output is wrapped in a .3gp container with the +faststart flag applied, which relocates the MOOV atom to the beginning of the file so the video can begin streaming or playing on a mobile device before the entire file is downloaded.

What Each Flag Does

Flag What it does
ffmpeg Invokes the FFmpeg tool. In the browser-based version of this tool, FFmpeg runs via WebAssembly (FFmpeg.wasm) entirely client-side — your SWF file never leaves your device.
-i input.swf Specifies the input file in SWF (Small Web Format) format. FFmpeg's SWF demuxer will attempt to extract the embedded FLV1 or MJPEG video stream and MP3 or AAC audio stream from inside the Flash container.
-c:v libx264 Re-encodes the video stream using the libx264 H.264 encoder, which is required because the 3GPP container does not support the FLV1 codec found in SWF files. H.264 is the standard video codec for 3G mobile devices.
-c:a aac Transcodes the audio stream to AAC using FFmpeg's built-in AAC encoder, replacing the MP3 audio typically found in SWF files. AAC is the mandatory audio codec for 3GPP compatibility and delivers better quality than MP3 at the same low bitrate.
-crf 23 Sets the Constant Rate Factor for the H.264 encoder to 23 — the libx264 default — which provides a good balance of quality and file size suitable for mobile screens. Lower values (e.g., 18) increase quality and file size; higher values (e.g., 28) reduce both.
-b:a 64k Sets the AAC audio output bitrate to 64 kilobits per second, which is the standard target for 3GPP audio intended for 3G network delivery where bandwidth is limited. This is sufficient for speech and simple audio but may be increased to 96k or 128k for music-heavy SWF content.
-movflags +faststart Moves the MOOV atom (file index and metadata) to the start of the .3gp file after encoding, enabling progressive playback on mobile devices over 3G networks without requiring the full file to download first.
output.3gp Specifies the output filename with the .3gp extension, which signals FFmpeg to wrap the encoded H.264 video and AAC audio in the 3GPP container format designed for mobile multimedia delivery.

Common Use Cases

  • Archiving old Flash-based animations or explainer videos from the pre-HTML5 era so they remain watchable on modern Android or legacy mobile devices that support 3GP playback
  • Converting Flash educational content or e-learning modules (exported as SWF with video) into a mobile-compatible format for distribution on low-bandwidth 3G networks
  • Repurposing Flash advertisement videos or promotional clips originally created for desktop web into a format deliverable to feature phones and early smartphones
  • Extracting and re-encoding video content embedded in SWF files to 3GPP for upload to platforms or CMS systems that require mobile-optimized video formats
  • Converting Flash-based video messages or greeting cards into 3GP files that can be sent as MMS attachments on mobile networks
  • Preserving SWF video content from decommissioned Flash-era websites into a long-term storable container backed by the widely supported H.264 codec

Frequently Asked Questions

No — interactive ActionScript logic, button behaviors, and pure vector animations that are rendered dynamically by the Flash runtime cannot be captured in this conversion. FFmpeg treats the SWF as a video source and only encodes what can be decoded as a rasterized video and audio stream. If your SWF contains only embedded video (FLV1 or MJPEG), it will convert cleanly. If it is primarily a vector-animated or interactive SWF, the output may be blank, incomplete, or only partially rendered.
The 3GPP standard is designed for mobile and 3G networks and mandates AAC as the primary audio codec for broad device compatibility. While 3GPP technically permits MP3 audio in some profiles, AAC provides better audio quality at the low bitrates (like 64k) typical of mobile delivery, and is universally supported by 3G-era devices. FFmpeg therefore transcodes the SWF's MP3 audio to AAC rather than copying it directly.
Both the SWF input and the 3GP output use lossy compression, so converting between them involves decoding the original lossy FLV1 video and re-encoding it with H.264 — a generational quality loss is inevitable. The default CRF value of 23 strikes a balance between file size and visual quality suitable for mobile screens. If the source SWF video was already heavily compressed, artifacts from the original encoding will be amplified. Lowering the CRF value (e.g., to 18) will improve quality at the cost of a larger file.
Adjust the -crf flag value to control H.264 video quality. Lower CRF values produce higher quality and larger files — for example, -crf 18 is near-visually lossless, while -crf 28 produces a smaller but noticeably degraded file. For mobile 3GP delivery where screen size and bandwidth are limited, values between 23 and 27 are typically appropriate. You can also increase the audio bitrate by changing -b:a 64k to -b:a 96k or -b:a 128k if audio fidelity is a priority.
Yes. On Linux or macOS, you can loop over all SWF files in a directory with: for f in *.swf; do ffmpeg -i "$f" -c:v libx264 -c:a aac -crf 23 -b:a 64k -movflags +faststart "${f%.swf}.3gp"; done. On Windows Command Prompt, use: for %f in (*.swf) do ffmpeg -i "%f" -c:v libx264 -c:a aac -crf 23 -b:a 64k -movflags +faststart "%~nf.3gp". This applies the same encoding settings to each file and names the output after the source SWF.
The +faststart flag instructs FFmpeg to move the MOOV atom (the file's metadata and index) to the beginning of the .3gp file after encoding. By default, this metadata is written at the end, which means a mobile device or streaming server must download the entire file before playback can begin. With +faststart, playback can start as soon as the initial metadata is read, which is especially important for 3G network delivery where buffering is a constraint. It is strongly recommended for any 3GP file intended for streaming or progressive download.

Technical Notes

SWF files that contain embedded video use either the FLV1 (Sorenson Spark H.263 variant) or MJPEG codec — neither of which is supported in the 3GPP container — making full re-encoding mandatory for this conversion. FFmpeg's libx264 encoder used here produces a Baseline or Main Profile H.264 stream, which maximizes compatibility with legacy 3G mobile devices that may not support High Profile H.264. The CRF encoding mode is variable bitrate, meaning the actual output bitrate will depend on the complexity and motion of the source video rather than being fixed. SWF files do not support subtitles, chapters, or multiple audio tracks, so none of these are lost in translation to 3GP, which similarly lacks support for them. One known limitation is that FFmpeg's SWF demuxer may struggle with SWF files that are primarily ActionScript-driven or use external asset loading, potentially producing no output or an error; only SWF files with self-contained, directly embedded video streams are reliably supported. Metadata from the SWF container (such as title or author fields, if present) is generally not preserved in the 3GP output due to differing metadata schemas between the two formats.

Related Tools