Overview
TheFFmpegHandler provides audio and video conversion capabilities using FFmpeg compiled to WebAssembly. It automatically discovers supported formats at initialization and handles complex video encoding scenarios with automatic error recovery.
Supported Formats
FFmpegHandler dynamically discovers formats at initialization by querying FFmpeg’s available muxers and demuxers. Common supported formats include:Video Formats
- MP4 - MPEG-4 Video
- WebM - Matroska / WebM
- MOV - QuickTime / MOV
- GIF - Graphics Interchange Format
- APNG - Animated PNG
- 3GP - 3GPP Multimedia Container
- 3G2 - 3GPP2 Multimedia Container
- Bink Video (.bik) - Read-only
Audio Formats
- MP3 - MPEG Audio Layer III
- M4A - MPEG-4 Audio
- WAV - Waveform Audio File Format
- FLAC - Free Lossless Audio Codec
- OGG - Ogg Vorbis
Initialization
The handler loads FFmpeg from/convert/wasm/ffmpeg-core.js and queries available formats:
Format Discovery Process
- Loads FFmpeg WASM module
- Executes
ffmpeg -formatsto list all muxers/demuxers - For each format, queries muxer details to get extension and MIME type
- Categorizes formats as audio, video, or image
- Applies manual fine-tuning and filtering
- Prioritizes common formats (WebM, MP4, GIF, WAV)
Manual Format Adjustments
The handler applies several manual adjustments after format discovery:Conversion Process
Basic Conversion
Image Sequence to Video
When converting image sequences (PNG/JPEG) to video, the handler automatically determines frame rate:MP4 Output
For MP4 output, the handler automatically sets the pixel format for maximum compatibility:Special Format Handling
Applies NTSC-DVD target with SAR correction:
Scales to 352x288 for PAL-VCD:
Error Recovery
FFmpegHandler includes sophisticated error recovery for common conversion failures:Automatic Padding
If dimensions aren’t divisible by the codec’s requirements:Sample Rate Adjustment
If the output format doesn’t support the input sample rate:Resolution Constraints
If specific resolutions are required:Safe Execution
The handler includes aexecSafe wrapper to handle FFmpeg crashes:
CLI arguments for FFmpeg
Max execution time in milliseconds.
-1 for no timeout.Number of retry attempts on “index out of bounds” errors
Crash Recovery
When FFmpeg crashes with “index out of bounds” (typically memory issues):- Terminates the FFmpeg instance
- Reloads FFmpeg from scratch
- Retries the conversion
- Repeats up to
attemptstimes
File Management
FFmpegHandler uses FFmpeg’s virtual file system:Format Categories
FFmpegHandler categorizes formats based on MIME type and description:- Audio: PCM codecs, formats with “audio” in description
- Video: Non-audio, non-image formats
- Image: APNG, PNG, BMP, TIFF
Implementation Details
Format Naming
Common formats use custom names from theformatNames map:
stdout Logging
The handler provides methods to capture FFmpeg’s stdout:Properties
Handler identifier
Dynamically populated array of supported formats during initialization
true when initialization is complete and handler is ready for conversionsSource Reference
Implementation:~/workspace/source/src/handlers/FFmpeg.ts