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

Per-stream metadata returned by `Exmpeg.probe/1`.

`kind` is one of `:video`, `:audio`, `:subtitle`, `:data`,
`:attachment`, or `:unknown`. The codec-specific maps (`audio`,
`video`) are populated only on streams of the matching kind so callers
can match on shape without consulting `kind` first.

# `audio_info`

```elixir
@type audio_info() :: %{
  sample_rate: integer(),
  channels: integer(),
  sample_format: String.t() | nil
}
```

# `kind`

```elixir
@type kind() :: :video | :audio | :subtitle | :data | :attachment | :unknown
```

# `t`

```elixir
@type t() :: %Exmpeg.Stream{
  audio: audio_info() | nil,
  bit_rate: integer(),
  codec: String.t(),
  codec_long_name: String.t() | nil,
  duration_s: float() | nil,
  index: non_neg_integer(),
  kind: kind(),
  nb_frames: integer() | nil,
  time_base: {integer(), integer()},
  video: video_info() | nil
}
```

# `video_info`

```elixir
@type video_info() :: %{
  width: integer(),
  height: integer(),
  pixel_format: String.t() | nil,
  frame_rate: {integer(), integer()}
}
```

---

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