---
id: "ffmpeg"
type: "component"
kind: "media-transcoder"
provider: "default"
category: "compute"
docs: "https://ffmpeg.org/ffmpeg.html"
url: "https://localhost:3000/catalogue/components/ffmpeg"
---

# FFmpeg

Command line transcoder and stream converter for audio and video.

| | |
|---|---|
| Provider | [default](https://localhost:3000/catalogue?provider=default) |
| Kind | [Media transcoder](https://localhost:3000/catalogue/kinds/media-transcoder) |
| Category | Compute |
| Official docs | [https://ffmpeg.org/ffmpeg.html](https://ffmpeg.org/ffmpeg.html) |

## Properties

| property | type | values | required | kind default | this component |
|---|---|---|---|---|---|
| `captions` | boolean | — | no | false | inherited |
| `drm` | boolean | — | no | false | **false** |
| `hardwareAcceleration` | boolean | — | no | false | inherited |
| `managed` | boolean | — | no | false | **false** |
| `maxBitrateKbps` | integer | — | no | — | inherited |
| `mode` | enum | `file`, `live` | no | — | **"file"** |
| `packaging` | enum | `none`, `hls`, `dash`, `cmaf`, `smooth` | no | "none" | **"none"** |
| `redundantPipeline` | boolean | — | no | false | **false** |
| `renditions` | integer | — | no | — | inherited |
| `streamCopy` | boolean | — | no | false | inherited |
| `videoCodec` | enum | `h264`, `h265`, `av1`, `vp9`, `prores` | no | — | inherited |

Bold values are the ones this component pins.

## Rules that apply · 1

### Stateful node without zone redundancy `stateful-node-without-zone-redundancy` (error)

- Page: https://localhost:3000/catalogue/rules/stateful-node-without-zone-redundancy.md
- Why: A stateful compute node pinned to exactly one availability zone disappears with that zone, and its state goes with it. Nodes inside a cell are exempt, because there the cell is deliberately single-zone and redundancy comes from the other cells.
- Applies to: every node in category compute
- Message: Stateful node '{{node.id}}' lives in exactly one availability zone. A zone outage takes its state with it.

It fires when:

- all of these hold:
  - the node's `stateless` is false
  - the node sits inside exactly 1 availability-zone group
  - this does not hold:
    - the node sits inside at least one cell group

## Other products of the same kind · 17

- [Intelligent Media Management](https://localhost:3000/catalogue/components/alibaba-imm.md) `alibaba-imm` — alibabacloud
- [Intelligent Media Services](https://localhost:3000/catalogue/components/alibaba-intelligent-media-services.md) `alibaba-intelligent-media-services` — alibabacloud
- [ApsaraVideo Live](https://localhost:3000/catalogue/components/alibaba-live.md) `alibaba-live` — alibabacloud
- [ApsaraVideo VOD](https://localhost:3000/catalogue/components/alibaba-vod.md) `alibaba-vod` — alibabacloud
- [AWS Elemental MediaConvert](https://localhost:3000/catalogue/components/aws-mediaconvert.md) `aws-mediaconvert` — aws
- [AWS Elemental MediaLive](https://localhost:3000/catalogue/components/aws-medialive.md) `aws-medialive` — aws
- [Image Transformations](https://localhost:3000/catalogue/components/cloudflare-image-transformations.md) `cloudflare-image-transformations` — cloudflare
- [Cloudflare Stream](https://localhost:3000/catalogue/components/cloudflare-stream.md) `cloudflare-stream` — cloudflare
- [Stream Live](https://localhost:3000/catalogue/components/cloudflare-stream-live.md) `cloudflare-stream-live` — cloudflare
- [Bento4](https://localhost:3000/catalogue/components/bento4.md) `bento4` — default
- [HandBrake](https://localhost:3000/catalogue/components/handbrake.md) `handbrake` — default
- [Generic media transcoder](https://localhost:3000/catalogue/components/media-transcoder.md) `media-transcoder` — default
- [Mux Video](https://localhost:3000/catalogue/components/mux.md) `mux` — default
- [Shaka Packager](https://localhost:3000/catalogue/components/shaka-packager.md) `shaka-packager` — default
- [Live Stream API](https://localhost:3000/catalogue/components/google-live-stream-api.md) `google-live-stream-api` — gcp
- [Transcoder API](https://localhost:3000/catalogue/components/google-transcoder-api.md) `google-transcoder-api` — gcp
- [OCI Media Flow](https://localhost:3000/catalogue/components/oci-media-flow.md) `oci-media-flow` — oci

## Use it in a design

```yaml
nodes:
  - { id: "ffmpeg", component: "ffmpeg" }
```

## Source (`component` YAML, verbatim)

```yaml
# yaml-language-server: $schema=../../schema/component.schema.json
# FFmpeg: command line transcoder. Per "ffmpeg Documentation", every stream is re-encoded
# unless `-c copy` is given, and the codec is the default encoder of the output muxer, so no
# codec or packaging is fixed out of the box; hardware acceleration is off (`-hwaccel none`).
schemaVersion: "1"
type: "component"
id: "ffmpeg"
kind: "media-transcoder"
provider: "default"
docs: "https://ffmpeg.org/ffmpeg.html"
defaults:
  managed: false
  mode: "file"
  packaging: "none"
  drm: false
  redundantPipeline: false
properties:
  streamCopy:
    type: "boolean"
    default: false
  hardwareAcceleration:
    type: "boolean"
    default: false
```

Human page: https://localhost:3000/catalogue/components/ffmpeg
