# `Exmpeg.Native`
[🔗](https://github.com/rubas/exmpeg/blob/v0.3.0/lib/exmpeg/native.ex#L1)

Low-level Rustler bindings to the `rsmpeg` Rust crate.

This module is private to the library. Use `Exmpeg` for the public API.
Stub names must match the Rust NIF symbols verbatim (Rustler verifies
arity at module load time); friendlier wrappers live below them.

# `input_source`

```elixir
@type input_source() :: String.t() | {:memory, binary()}
```

Input source. A plain string is a filesystem path; `{:memory, binary}`
hands the entire input buffered in memory to a custom AVIOContext.

# `concat`

```elixir
@spec concat([input_source()], String.t(), map()) :: {:ok, map()} | {:error, map()}
```

Stream-copy concatenation of multiple inputs into a single output.

# `extract_audio`

```elixir
@spec extract_audio(input_source(), String.t(), map()) ::
  {:ok, map()} | {:error, map()}
```

Decodes the best audio stream and writes it as a 16-bit PCM WAV.

# `extract_frame`

```elixir
@spec extract_frame(input_source(), String.t(), map()) ::
  {:ok, map()} | {:error, map()}
```

Decodes a single video frame at a timestamp and writes it as an image.

# `probe`

```elixir
@spec probe(input_source()) :: {:ok, map()} | {:error, map()}
```

Probes a media file and returns format + per-stream metadata.

# `remux`

```elixir
@spec remux(input_source(), String.t(), map()) :: {:ok, map()} | {:error, map()}
```

Stream-copies an input container to an output container.

# `transcode`

```elixir
@spec transcode(input_source(), String.t(), map()) :: {:ok, map()} | {:error, map()}
```

Per-stream re-encode with codec / bitrate / scale / fps selection.

# `version`

```elixir
@spec version() :: {:ok, map()} | {:error, map()}
```

Reports the FFmpeg version + configure flags this NIF is linked against.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
