pub enum OutputFormat {
Mp4H264Aac,
Mp4H265Aac,
WebmVp9Opus,
WebmAv1Opus,
}Expand description
Output container + codec selection. Carries the (format → codec → muxer → file extension) tuple as one type so the rest of the pipeline can switch on a single value.
Default is OutputFormat::Mp4H264Aac — the universally-
compatible “just give me an .mp4” choice. Other variants are
opt-in via the M-EXPORT.4 format dropdown.
Variants§
Mp4H264Aac
.mp4 container, H.264 video, AAC audio. The default for
universal compatibility (QuickTime, every browser, every
editor). macOS uses vtenc_h264_hw (hardware), Windows
mfh264enc, Linux vaapih264enc / x264enc fallback.
Mp4H265Aac
.mp4 container, H.265 (HEVC) video, AAC audio. ~30%
smaller files at equivalent quality vs. H.264; requires
macOS 11+, Windows 10+, Linux with VAAPI HEVC support.
WebmVp9Opus
.webm container, VP9 video, Opus audio. Open codec
(royalty-free), good browser support. macOS has no HW VP9
encoder so uses libvpx-vp9 (slow).
WebmAv1Opus
.webm container, AV1 video, Opus audio. Best compression
of the four; HW encoders are M3+ Macs, Intel Arc, NVIDIA
RTX 40+. Software fallback via svtav1enc (slow).
Implementations§
Source§impl OutputFormat
impl OutputFormat
Sourcepub fn slug(self) -> &'static str
pub fn slug(self) -> &'static str
URL-safe slug for the M-EXPORT.4 format dropdown +
RecordingConfig.format IPC field.
Sourcepub fn from_slug(slug: &str) -> Option<Self>
pub fn from_slug(slug: &str) -> Option<Self>
Parse the slug back to an OutputFormat. Inverse of
Self::slug. Unknown slugs return None so the caller can
surface a typed error.
Sourcepub const fn max_encode_edge(self) -> Option<u32>
pub const fn max_encode_edge(self) -> Option<u32>
Maximum encodable edge length (px) for this format’s hardware
video encoder, or None when the encoder imposes no hard
dimension cap.
Empirically probed on Apple Silicon (M1, GStreamer 1.26.8):
VideoToolbox’s vtenc_h264_hw rejects caps negotiation
(not-negotiated (-4), then the pipeline refuses to preroll)
the instant either edge exceeds 4096 — the H.264 Level 5.2
frame-side ceiling. It is a per-axis cap, not a pixel-area
cap (4096×4096 succeeds while the smaller 5120×1440 fails).
vtenc_h265_hw accepts at least 8192×4320 (HEVC Level 6).
The software WebM encoders (vp9enc / svtav1enc) have no
hard cap — they only get slower. See AUT-334.
Trait Implementations§
Source§impl Clone for OutputFormat
impl Clone for OutputFormat
Source§fn clone(&self) -> OutputFormat
fn clone(&self) -> OutputFormat
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for OutputFormat
impl Debug for OutputFormat
Source§impl Default for OutputFormat
impl Default for OutputFormat
Source§fn default() -> OutputFormat
fn default() -> OutputFormat
Source§impl<'de> Deserialize<'de> for OutputFormat
impl<'de> Deserialize<'de> for OutputFormat
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl PartialEq for OutputFormat
impl PartialEq for OutputFormat
Source§fn eq(&self, other: &OutputFormat) -> bool
fn eq(&self, other: &OutputFormat) -> bool
self and other values to be equal, and is used by ==.