npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@mikefinch/ezffmpeg

v1.1.5

Published

The eziest way to use ffmpeg

Readme

ezffmpeg banner

This fork has been fully rewritten in TypeScript, refactored for clarity, now includes simple unit tests, and introduces a strategy-based abstraction over the ffmpeg implementation.

A simple and powerful Node.js wrapper for ffmpeg that makes editing videos easy

Demo | Full Documentation

Features

  • 🎥 Easy video concatenation
  • 📐 Video scaling and padding
  • 🔊 Audio processing and volume control
  • 0️⃣ Zero dependencies besides ffmpeg
  • 💬 Text overlay support
  • 🎯 Position and timing control
  • 🎨 Font customization and text effects
  • 🛠️ Strategy-based ffmpeg implementation abstraction

Installation

npm install @mikefinch/ezffmpeg

Optional: if you use the default ffmpeg strategy, ensure you have ffmpeg installed on your system:

  • Mac: brew install ffmpeg
  • Ubuntu/Debian: apt-get install ffmpeg
  • Windows: Download from ffmpeg.org

Otherwise, you can provide your own ffmpeg implementation (via the strategy abstraction), or omit ffmpeg entirely by supplying a no-op strategy.

Quick Start

1. Import the package

import ezffmpeg from '@mikefinch/ezffmpeg';

2. Create a project

The ezffmpeg constructor accepts a generic type parameter for strategy-specific options. The default strategy doesn’t require extra options, so its generic defaults to {} and you can omit it:

const project = new ezffmpeg({
  width: 1920,
  height: 1080,
  fps: 30,
  strategy: LocalFfmpegStrategy,
});

If your custom strategy requires its own options interface (e.g. MyStrategyOptions), you can pass it explicitly:

const MyFfmpegStrategy: FfmpegStrategy<{ param: number }> = {
  ffmpeg: async (command, options) => {
    // impl with options.param
  },

  ffprobe: async (command) => {
    // impl
  }
}
const project = new ezffmpeg<{ param: number }>({
  width: 1920,
  height: 1080,
  fps: 30,
  strategy: MyFfmpegStrategy,
});

3. Load clips into the project Load clips into the project**

await project.load([
  {
    type: 'video',
    url: 'path/to/cat.mp4',
    position: 0,
    end: 3,
  },
  {
    type: 'video',
    url: 'path/to/cat2.mp4',
    position: 3,
    end: 6,
  },
  {
    type: 'audio',
    url: 'path/to/music.mp4',
    position: 0,
    end: 6,
  },
  {
    type: 'text',
    text: 'this is so ez',
    position: 0,
    end: 3,
    fontSize: 50,
    fontColor: 'white',
    borderWidth: 5,
    borderColor: '#000000',
  },
]);

4. Export

You can now pass the output file path directly:

await project.export('final.mp4', {param: 3});

Documentation

Find the full API documentation here.