update-ffmpeg

$npx mdskill add remotion-dev/remotion/update-ffmpeg

The FFmpeg build recipes, Rust bindings and wrapper live in [`packages/compositor/ffmpeg`](../../../packages/compositor/ffmpeg/README.md). The compositor and wrapper use local Cargo dependencies, and updates are reviewed in a single Remotion pull request.

SKILL.md

.github/skills/update-ffmpegView on GitHub ↗
---
name: update-ffmpeg
description: Update the monorepo FFmpeg archives, regenerate bindings, rebuild compositor binaries, and validate a single Remotion pull request. Use after the seven-platform FFmpeg build completes.
---

# Update Remotion FFmpeg

The FFmpeg build recipes, Rust bindings and wrapper live in [`packages/compositor/ffmpeg`](../../../packages/compositor/ffmpeg/README.md). The compositor and wrapper use local Cargo dependencies, and updates are reviewed in a single Remotion pull request.

## Collect and import

Use the full source commit SHA for the intended FFmpeg build.

Explicitly trigger the CircleCI pipeline on the branch containing that commit using the web app's **Trigger Pipeline** button or the API. No parameters are needed: the workflow only runs for `pipeline.trigger.type == "api"`, which covers both methods. See the [trigger instructions](../../../packages/compositor/ffmpeg/README.md#rebuild-ffmpeg). Wait for its five jobs and the macOS GitHub Actions build for the same commit to succeed. Then collect artifacts from the Remotion repository root:

```sh
node packages/compositor/ffmpeg/collect-artifacts.mjs --sha <full-source-sha>
```

The collector requires successful GitHub Actions and CircleCI builds for that same SHA. Do not combine runs or fill missing targets from an older build. Keep the returned `MANIFEST.json` and `SHA256SUMS` with the seven archives.

Upload the verified archives to a new immutable directory on `remotion.media` using the repository's R2 upload workflow. Never overwrite an existing release directory. Then run:

```sh
node packages/compositor/ffmpeg/import-artifacts.mjs <artifact-directory> <immutable-https-base-url>
```

The importer verifies local and hosted archive checksums before updating `assets.json` and the seven canonical generated bindings. Archives remain ignored downloads. Do not hand-edit bindings.

## Rebuild and validate

Install dependencies with `bun install --frozen-lockfile`. From `packages/compositor`, install missing cross-compilation toolchains with `bun install-toolchain.ts`, then run `bun run build-all`.

Require all seven targets: Windows x64 GNU, macOS ARM64/x64, Linux ARM64/x64 GNU/musl. On macOS, use an MSVCRT-targeting `x86_64-w64-mingw32-gcc`. Verify `objdump -p packages/compositor-win32-x64-msvc/remotion.exe` imports `msvcrt.dll` and no `api-ms-win-crt-*` or `ucrtbase.dll`.

From the repository root, run `bun run build`, `bun run stylecheck`, and `git diff --check`. Inspect the FFmpeg metadata/binding changes and all seven rebuilt compositor packages. Do not include unrelated changes.

When a PR is requested, read [`../pr/SKILL.md`](../pr/SKILL.md) and [`../pr-name/SKILL.md`](../pr-name/SKILL.md). Include the full source SHA, hosted archive directory, CI provenance, rebuilt targets and validation results. Use the title:

```text
`@remotion/compositor`: Update FFmpeg and rebuild binaries
```

`packages/lambda-binaries` packages Chromium and fonts and does not need a rebuild for an FFmpeg-only update.

More from remotion-dev/remotion

SkillDescription
add-bugAdd a new Remotion bug entry to packages/bugs/api/[v].ts. Use when the user describes a bug and affected Remotion versions that should be surfaced through the bugs API.
add-cli-optionAdd a new Remotion CLI or config option by creating an AnyRemotionOption, registering CLI parsing, wiring config setters, and updating documentation. Use when adding or converting command-line flags or Remotion options.
add-effectAdd a new effect to @remotion/effects, including implementation, package exports, docs, demos, preview images, Remotion skill updates, formatting, and builds.
add-expertAdd a new expert to the Remotion experts page
add-new-packageAdd a new package to the Remotion monorepo, including package scaffolding, monorepo registration, documentation, build scripts, and release checklist updates. Use when creating a new @remotion package.
add-sfxAdd a new sound effect to @remotion/sfx
add-webcodecs-bugAdd a browser WebCodecs bug to the Remotion Mediabunny WebCodecs bugs docs page. Use when given a Chromium, WebKit, or Firefox issue URL that should be tracked in packages/docs/docs/mediabunny/webcodecs-bugs.mdx, especially when needing to look up the issue title, filing date, reporter, and resolution state before editing the MDX table.
canvas-capture-extensionRebuild, install, and reload the private Remotion Canvas Capture unpacked Chrome extension. Use when the extension needs to be restored after a Codex worktree was deleted, rebuilt after source changes, moved to its durable install directory, or reloaded in Chrome or Chrome Canary.
checkoutCheckout a requested branch or ref in the Remotion repo, rename the current task to the associated PR title when running in Codex, then install dependencies and build. Use when the user asks to checkout a ref and prepare the workspace.
convertStart the local @remotion/convert app and open it in the Codex browser. Use when the user invokes /convert or $convert, asks to launch convert.remotion.dev locally, or wants to inspect the Convert package UI.