View Source Membrane.H265.FFmpeg.Encoder (Membrane H265 FFmpeg plugin v0.4.2)

Membrane element that encodes raw video frames to H265 format.

The element expects each frame to be received in a separate buffer, so the parser (Membrane.Element.RawVideo.Parser) may be required in a pipeline before the encoder (e.g. when input is read from Membrane.File.Source).

Additionally, the encoder has to receive proper stream_format with picture format and dimensions before any encoding takes place.

Please check t/0 for available options.

Element options

Passed via struct Membrane.H265.FFmpeg.Encoder.t/0

  • crf

    0..51

    Default value: 28
    Constant rate factor that affects the quality of output stream. Value of 0 is lossless compression while 51 offers the worst quality. The range is exponential, so increasing the CRF value +6 results in roughly half the bitrate / file size, while -6 leads to roughly twice the bitrate.

  • preset

    preset()

    Default value: :medium
    Collection of predefined options providing certain encoding. The slower the preset chosen, the higher compression for the same quality can be achieved.

  • profile

    H265.profile_t() | nil

    Default value: nil
    Sets a limit on the features that the encoder will use to the ones supported in a provided H265 profile. Said features will have to be supported by the decoder in order to decode the resulting video. It may override other, more specific options affecting compression.

  • tune

    tune() | nil

    Default value: nil
    Optionally tune the encoder settings for a particular type of source or situation. See x265 encoder's man page for more info. Available options are:

    • :grain - preserves the grain structure in old, grainy film material
    • :fastdecode - allows faster decoding by disabling certain filters
    • :zerolatency - good for fast encoding and low-latency streaming
  • use_shm?

    boolean()

    Default value: false
    If true, native encoder will use shared memory (via Shmex.t/0) for storing frames

  • max_b_frames

    non_neg_integer() | nil

    Default value: nil
    Maximum number of B-frames between non-B-frames. Set to 0 to encode video without b-frames

  • gop_size

    non_neg_integer() | nil

    Default value: nil
    Number of frames in a group of pictures.

  • x265_params

    binary()

    Default value: ""
    Set x265 options using a list of key=value couples separated by ":". See x265 --help for a list of options.

Pads

:input

Accepted formats:

%RawVideo{pixel_format: format, aligned: true} when format in [:I420, :I422]
Direction::input
Availability::always
Flow control::auto

:output

Accepted formats:

%H265{alignment: :au}
Direction::output
Availability::always
Flow control::auto

Summary

Types

t()

Struct containing options for Membrane.H265.FFmpeg.Encoder

Functions

Returns description of options available for this module

Types

@type preset() ::
  :ultrafast
  | :superfast
  | :veryfast
  | :faster
  | :fast
  | :medium
  | :slow
  | :slower
  | :veryslow
  | :placebo
@type t() :: %Membrane.H265.FFmpeg.Encoder{
  crf: 0..51,
  gop_size: non_neg_integer() | nil,
  max_b_frames: non_neg_integer() | nil,
  preset: preset(),
  profile: Membrane.H265.profile_t() | nil,
  tune: tune() | nil,
  use_shm?: boolean(),
  x265_params: binary()
}

Struct containing options for Membrane.H265.FFmpeg.Encoder

@type tune() :: :grain | :fastdecode | :zerolatency

Functions

@spec options() :: keyword()

Returns description of options available for this module