| Type | Contents | Conversion Method |
|---|
| Video SWF | Embedded FLV or H.264 stream | Direct extraction or re-encode |
| Animation SWF | Vector graphics, ActionScript | Screen recording or runtime rendering |
| Interactive SWF | Games, apps, UI elements | Screen recording only |
| Slideshow SWF | Static frames with transitions | Frame extraction + video assembly |
Check what type of SWF you have:
ffprobe -v error -show_streams input.swf
If FFmpeg detects video and audio streams, you have a video SWF and can convert it directly. If it shows no streams or only minimal data, you have a vector/interactive SWF that requires a different approach.
For SWF files that contain embedded video streams (common for Flash video players from the YouTube/Vimeo era):
ffmpeg -i input.swf -c:v libx264 -crf 20 -preset medium \
-c:a aac -b:a 128k -movflags +faststart output.mp4
If the SWF contains an H.264 stream that is MP4-compatible, you can try copying it:
ffmpeg -i input.swf -c:v copy -c:a aac -b:a 128k output.mp4
Some SWF files wrap an FLV file that can be extracted first, then converted:
# Extract the FLV
ffmpeg -i input.swf -c copy extracted.flv
# Convert FLV to MP4
ffmpeg -i extracted.flv -c:v libx264 -crf 20 \
-c:a aac -b:a 128k -movflags +faststart output.mp4
For more on FLV conversion, see our guide on how to convert FLV to MP4.
Vector animation SWFs cannot be directly converted by FFmpeg because the content is not pre-rendered video — it is a set of drawing instructions that the Flash Player executes at runtime. You need a Flash runtime to render the frames.
Ruffle is an open-source Flash Player emulator written in Rust. It can run SWF files in a desktop window, which you can then screen-record:
- Download and install Ruffle desktop
- Open your SWF file with Ruffle
- Use a screen recorder to capture the playback as MP4
On Linux, you can automate this with FFmpeg's screen capture:
# Start Ruffle in the background, then capture
ffmpeg -f x11grab -framerate 30 -video_size 800x600 \
-i :0.0+100,200 -c:v libx264 -crf 18 output.mp4
Adjust the position offset (+100,200) and size (800x600) to match your Ruffle window.
JPEXS can export SWF animations frame-by-frame as PNG sequences, which you then assemble into video:
# After exporting frames as frame_001.png, frame_002.png, etc.
ffmpeg -framerate 24 -i "frame_%03d.png" \
-c:v libx264 -crf 18 -pix_fmt yuv420p output.mp4
Set the -framerate to match the SWF's original frame rate (commonly 12, 24, or 30 fps).
For video-type SWF files, use the Video Converter online to convert directly to MP4 without installing any tools.
Frame rate: Flash animations commonly run at 12, 15, 24, or 30 fps. When assembling from frame sequences, matching the original frame rate is critical — using the wrong rate makes the animation play too fast or too slow. Check the original SWF's frame rate with JPEXS or SWFTools (swfdump -X input.swf).
Resolution: SWF vector animations are resolution-independent. When screen-recording or exporting frames, you can render at any resolution. For archival purposes, render at 1080p (1920x1080) if the content fills the frame. For web use, 720p is typically sufficient.
Audio: Flash animations often have event-based sound effects and background music stored in MP3 or ADPCM format. These get captured during screen recording. If you need to extract audio separately, JPEXS can export individual sound assets from the SWF.
Interactivity: Interactive SWF content (games, quizzes, navigation) cannot be fully captured as video since the experience depends on user input. Record a walkthrough showing the key interactions, or consider preserving the SWF in its original form using Ruffle for future playback.
For video compression settings, check our guide on how to compress video without losing quality.
This means the SWF is a vector animation, not a video container. FFmpeg cannot convert it directly — use the Ruffle screen recording or JPEXS frame export method described above.
Some SWF files use the Flash drawing API for visuals rather than embedded video frames. FFmpeg extracts the audio but has nothing to render for video. Use the screen recording method instead.
Video SWF files sometimes have a short preloader or splash screen as the "video" portion, while the main content is ActionScript-driven animation. The few seconds FFmpeg extracts is just the preloader. Use Ruffle to play the full content and screen-record it.
Increase the recording resolution and use a lower CRF (e.g., 16-18). Screen recordings compress well because Flash animations have large areas of flat color, so the file size stays reasonable even at high quality settings.
Preserving Flash Content for the Future
Beyond conversion to MP4, consider these preservation strategies:
- Keep the original SWF alongside the MP4 — future emulators may render it better
- Use Ruffle for interactive content that loses meaning as linear video
- Archive to the Internet Archive's Flash collection, which uses Ruffle for in-browser playback
- Document the original frame rate and resolution in the MP4 file's metadata
Converting SWF to MP4 depends entirely on what type of SWF you have. Video SWFs with embedded streams convert directly through FFmpeg in seconds. Vector animation SWFs require a Flash runtime (Ruffle) to render the content, which you then capture as video. Interactive SWFs are best preserved in their original form using emulators, with video walkthroughs for reference.
Ready to convert? Try our free Video Converter — no registration required.