Skip to main content

OutputFormat

Enum OutputFormat 

Source
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

Source

pub fn extension(self) -> &'static str

File extension this format writes (without leading .).

Source

pub fn slug(self) -> &'static str

URL-safe slug for the M-EXPORT.4 format dropdown + RecordingConfig.format IPC field.

Source

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.

Source

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

Source§

fn clone(&self) -> OutputFormat

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for OutputFormat

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for OutputFormat

Source§

fn default() -> OutputFormat

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for OutputFormat

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for OutputFormat

Source§

fn eq(&self, other: &OutputFormat) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Serialize for OutputFormat

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl Copy for OutputFormat

Source§

impl Eq for OutputFormat

Source§

impl StructuralPartialEq for OutputFormat

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,