Skip to content

Pipeline

The pipeline builder chains multiple operations with automatic temp file management. Each step receives its dependencies and produces output that the next step can use.

Basic usage

typescript
import { ffmpeg, transform, exportVideo } from "ffmpeg-kit";

const result = await ffmpeg.pipeline()
  .step("scale", (deps) =>
    transform(deps).input("input.mp4").scale({ width: 1280 }).output("$tmp"))
  .step("export", (deps) =>
    exportVideo(deps).input("$prev").preset("youtube_1080p").output("output.mp4"))
  .execute();

$tmp and $prev placeholders

  • $tmp — allocates a temporary file. Auto-cleaned after the pipeline completes.
  • $prev — refers to the output of the previous step.
typescript
await ffmpeg.pipeline()
  .step("normalize", (deps) =>
    transform(deps).input("video.mp4").scale({ width: 1920 }).output("$tmp"))
  .step("audio", (deps) =>
    audio(deps).input("$prev").normalize({ targetLUFS: -16 }).output("$tmp"))
  .step("export", (deps) =>
    exportVideo(deps).input("$prev").preset("youtube_1080p").output("final.mp4"))
  .execute();

Auto temp file cleanup

Temp files created by $tmp are automatically deleted after .execute() completes, whether it succeeds or throws. No manual cleanup needed.

Accessing step results

typescript
const pipeline = await ffmpeg.pipeline()
  .step("extract", (deps) =>
    transform(deps).input("video.mp4").trimStart(10).duration(30).output("$tmp"))
  .step("export", (deps) =>
    exportVideo(deps).input("$prev").output("clip.mp4"))
  .execute();

// pipeline.results is a map of step name → result
console.log(pipeline.results.export.outputPath); // "clip.mp4"

Error handling

If any step fails, the pipeline throws FFmpegError (or returns { success: false } with .tryExecute()). Temp files are still cleaned up.

typescript
const result = await ffmpeg.pipeline()
  .step("scale", (deps) =>
    transform(deps).input("video.mp4").scale({ width: 1280 }).output("$tmp"))
  .step("export", (deps) =>
    exportVideo(deps).input("$prev").output("out.mp4"))
  .tryExecute();

if (!result.success) {
  console.error("Pipeline failed at step:", result.error.message);
}

Released under the MIT License.