Skip to main content

VideoCodec

Enum VideoCodec 

Source
pub enum VideoCodec {
    H264,
    OpenH264,
    H265,
    Kvazaar,
    Vp8,
    Vp9,
    Av1,
    Svtav1,
    Mpeg4,
}
Expand description

Which software encoder to open. Whatever’s picked, SwEncoder::new fails with SwEncoderError::CodecNotFound (not a panic) if the linked ffmpeg build doesn’t actually have it — this crate never vendors any of these, it’s whatever the local ffmpeg install was built with (check with ffmpeg -encoders).

GPL-licensed encoders need an ffmpeg build compiled with --enable-gpl (separate from — and unlike — FFmpeg’s own native h264/hevc decoders, which SwDecoder already uses and which carry no such requirement; GPL only enters the picture on the encode side, through these specific libraries): VideoCodec::H264 and VideoCodec::H265 are GPL. Every other variant here is a permissively-licensed (BSD/similar) alternative that needs no special build flag beyond being enabled at all.

Variants§

§

H264

libx264 — H.264. GPL.

§

OpenH264

libopenh264 — H.264, Cisco’s BSD-2-Clause encoder (Cisco covers H.264 patent royalties for binary redistributions of it). The non-GPL alternative to VideoCodec::H264.

§

H265

libx265 — H.265/HEVC. GPL.

§

Kvazaar

libkvazaar — H.265/HEVC, BSD-2-Clause. The non-GPL alternative to VideoCodec::H265.

§

Vp8

libvpx — VP8, BSD-3-Clause.

§

Vp9

libvpx-vp9 — VP9, BSD-3-Clause (same libvpx project as VideoCodec::Vp8, different encoder name).

§

Av1

libaom-av1 — AV1’s reference encoder, BSD-2-Clause. Most broadly compatible AV1 output, but much slower than VideoCodec::Svtav1 — prefer that one unless you specifically need libaom’s own encoding behavior.

§

Svtav1

libsvtav1 — AV1 via Intel’s SVT-AV1, BSD-2-Clause-Patent. Far faster than VideoCodec::Av1 (libaom-av1) at a given quality target — the practical default for real-time AV1 encoding.

§

Mpeg4

mpeg4 — MPEG-4 Part 2, and the only encoder here that is FFmpeg’s own rather than a library it was linked against.

Which is the whole reason it is offered. Every variant above needs its library to have been enabled at build time, and an FFmpeg with none of them cannot encode video at all through this element. This one is in every build there is.

It is also the only always-present encoder that will emit B-frames (see SwEncoderOptions::max_b_frames) — libopenh264 emits none whatever it is asked for, and the H.264 encoders that would are the GPL ones. That makes it what a test reaches for when what it is testing is reordering.

Not a codec to choose for output anyone has to play: it predates H.264 and compresses far worse at the same quality.

Trait Implementations§

Source§

impl Clone for VideoCodec

Source§

fn clone(&self) -> VideoCodec

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 Copy for VideoCodec

Source§

impl Debug for VideoCodec

Source§

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

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

impl Eq for VideoCodec

Source§

impl PartialEq for VideoCodec

Source§

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

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

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

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for VideoCodec

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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> CryptoSafe for T
where T: Send + Sync + Debug,

Source§

impl<T> CryptoSafe for T

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

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

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

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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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 = !

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

fn try_from(value: U) -> Result<T, !>

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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

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
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

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