Encoding Settings¶
Control video quality, format, and compression
Fluvie provides extensive control over the final video encoding through the EncodingConfig class.
Table of Contents¶
Overview¶
Encoding settings control how FFmpeg encodes your final video:
final settings = EncodingConfig(
quality: RenderQuality.high,
outputFormat: OutputFormat.mp4,
audioCodec: AudioCodec.aac,
);
await RenderService.execute(
composition: video,
outputPath: 'output.mp4',
settings: settings,
tester: tester,
);
RenderQuality Presets¶
Available Presets¶
| Preset | CRF | Preset | Use Case |
|---|---|---|---|
preview |
28 | ultrafast |
Quick previews, testing |
standard |
23 | medium |
General use, good balance |
high |
18 | slow |
Final output, best quality |
lossless |
0 | veryslow |
Archival, no quality loss |
Using Presets¶
// Quick preview
EncodingConfig(quality: RenderQuality.preview)
// Standard output
EncodingConfig(quality: RenderQuality.standard)
// High quality final
EncodingConfig(quality: RenderQuality.high)
// Lossless (very large files)
EncodingConfig(quality: RenderQuality.lossless)
Preset Details¶
Preview Quality¶
- CRF: 28 (lower quality)
- Preset: ultrafast
- Use: Testing, iteration
- File size: Small
- Speed: Very fast
Standard Quality¶
- CRF: 23 (good quality)
- Preset: medium
- Use: General distribution
- File size: Moderate
- Speed: Moderate
High Quality¶
- CRF: 18 (excellent quality)
- Preset: slow
- Use: Final exports
- File size: Larger
- Speed: Slow
Lossless¶
- CRF: 0 (perfect quality)
- Preset: veryslow
- Use: Archival, further editing
- File size: Very large
- Speed: Very slow
Custom Settings¶
CRF (Constant Rate Factor)¶
CRF controls quality. Lower = better quality, larger files.
| CRF Range | Quality | File Size |
|---|---|---|
| 0-17 | Visually lossless | Large |
| 18-23 | High quality | Moderate |
| 24-28 | Good quality | Smaller |
| 29+ | Lower quality | Small |
FFmpeg Preset¶
Controls encoding speed vs compression efficiency:
| Preset | Speed | Compression |
|---|---|---|
ultrafast |
Fastest | Lowest |
superfast |
Very fast | Low |
veryfast |
Fast | Below average |
faster |
Fast | Average |
fast |
Medium-fast | Above average |
medium |
Medium | Good |
slow |
Slow | Better |
slower |
Very slow | Very good |
veryslow |
Slowest | Best |
Video Codec¶
EncodingConfig(
videoCodec: VideoCodec.h264, // Most compatible
// or
videoCodec: VideoCodec.h265, // Better compression
// or
videoCodec: VideoCodec.vp9, // Open format
)
Audio Codec¶
EncodingConfig(
audioCodec: AudioCodec.aac, // Most compatible
// or
audioCodec: AudioCodec.mp3, // Universal
// or
audioCodec: AudioCodec.opus, // Best quality per bit
)
Audio Bitrate¶
| Bitrate | Quality | Use Case |
|---|---|---|
96k |
Acceptable | Speech |
128k |
Good | General |
192k |
High | Music |
320k |
Excellent | High-fidelity |
Output Formats¶
MP4 (Recommended)¶
Most compatible format:
EncodingConfig(
outputFormat: OutputFormat.mp4,
videoCodec: VideoCodec.h264,
audioCodec: AudioCodec.aac,
)
WebM¶
Open format, good for web:
EncodingConfig(
outputFormat: OutputFormat.webm,
videoCodec: VideoCodec.vp9,
audioCodec: AudioCodec.opus,
)
MOV¶
Apple ecosystem:
EncodingConfig(
outputFormat: OutputFormat.mov,
videoCodec: VideoCodec.h264,
audioCodec: AudioCodec.aac,
)
GIF¶
Animated images (no audio):
Frame Format¶
Control how frames are captured before encoding:
EncodingConfig(
frameFormat: FrameFormat.png, // Higher quality, slower
// or
frameFormat: FrameFormat.rawRgba, // Faster, more memory
)
| Format | Quality | Speed | Memory |
|---|---|---|---|
| PNG | Lossless | Slower | Lower |
| Raw RGBA | Lossless | Faster | Higher |
Debug Options¶
Save Individual Frames¶
This saves each frame as a PNG file, useful for: - Debugging visual issues - Creating frame-by-frame animations - Inspecting specific frames
Verbose Logging¶
Examples¶
Social Media Export¶
// Instagram/TikTok optimized
EncodingConfig(
quality: RenderQuality.high,
outputFormat: OutputFormat.mp4,
videoCodec: VideoCodec.h264,
audioCodec: AudioCodec.aac,
audioBitrate: '192k',
)
Web Optimized¶
// Smaller file for web streaming
EncodingConfig(
crf: 25,
preset: 'fast',
outputFormat: OutputFormat.mp4,
audioBitrate: '128k',
)
Archival Quality¶
// Maximum quality preservation
EncodingConfig(
quality: RenderQuality.lossless,
outputFormat: OutputFormat.mov,
frameFormat: FrameFormat.png,
)
Fast Preview¶
// Quick iteration
EncodingConfig(
quality: RenderQuality.preview,
outputFormat: OutputFormat.mp4,
)
Custom Fine-Tuned¶
EncodingConfig(
crf: 20,
preset: 'slow',
videoCodec: VideoCodec.h264,
audioCodec: AudioCodec.aac,
audioBitrate: '256k',
outputFormat: OutputFormat.mp4,
// Extra FFmpeg arguments
extraArgs: ['-movflags', '+faststart'],
)
File Size Estimation¶
Rough estimates for 1080p video:
| Quality | Bitrate | 1 min | 5 min |
|---|---|---|---|
| Preview (CRF 28) | ~2 Mbps | ~15 MB | ~75 MB |
| Standard (CRF 23) | ~5 Mbps | ~38 MB | ~188 MB |
| High (CRF 18) | ~10 Mbps | ~75 MB | ~375 MB |
| Lossless | ~50+ Mbps | ~400+ MB | ~2+ GB |