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 🙏

© 2024 – Pkg Stats / Ryan Hefner

wave.ffmpeg

v1.0.0

Published

FFmpeg Node.js Wrapper

Downloads

4

Readme

FFmpeg & FFprobe Wrapper

This Node.js module provides a wrapper around FFmpeg and FFprobe to process media files, track the progress of the conversion, and retrieve media metadata.

Usage

Here's an example of how to use this wrapper to execute FFmpeg commands:

const { FFmpeg, FFprobe } = require("wave.ffmpeg");

new FFmpeg()
    .appendOption(
        "-i", "input.mp4",
        "-c:v" "copy",
        "-c:v", "copy",
        "-vf", "scale=640:480",
        "output.mp4"
    )
    .on("progress", (progress) => {
        console.log(`${progress.percent.toFixed(1)}% | ${Math.floor(progress.remaining / 3600)}h ${Math.floor(progress.remaining / 60 % 60)}min ${Math.floor(progress.remaining % 60)}s`);
    })
    .on("end", () => {
        console.log("Conversion complete!");
    })
    .on("error", (error) => {
        console.error("Error occurred:", error);
    })
    .run(await (new FFprobe().getMediaDuration("input.mp4")));

Features

  • FFmpeg: Allows running FFmpeg commands and emits progress events.
  • FFprobe: Fetches media duration using FFprobe.

Installation

Before using this package, ensure that FFmpeg and FFprobe are installed on your system and accessible from your PATH.

To install the package:

npm install wave.ffmpeg

FFmpeg

The FFmpeg class is used to run FFmpeg commands and track the progress of media processing.

Exemple

const { FFmpeg } = require("wave.ffmpeg");

const ffmpeg = new FFmpeg();
ffmpeg.setFFmpegPath("/path/to/ffmpeg"); // Optional: Set the path to the ffmpeg executable

ffmpeg.appendOption("-i", "input.mp4", "-c:v", "libx264", "output.mp4");

ffmpeg.on("progress", (progress) => {
    console.log(`Progress: ${progress.percent.toFixed(2)}%`);
    console.log(`Remaining time: ${progress.remaining.toFixed(2)} seconds`);
});

ffmpeg.on("end", () => {
    console.log("Processing finished.");
});

ffmpeg.on("error", (error) => {
    console.error("Error occurred:", error);
});

ffmpeg.run(mediaDuration); // mediaDuration should be in seconds

FFprobe

The FFprobe class is used to fetch media metadata such as the duration.

const { FFprobe } = require("wave.ffmpeg");

const ffprobe = new FFprobe();
ffprobe.setFFprobePath("/path/to/ffprobe"); // Optional: Set the path to the ffprobe executable

ffprobe.getMediaDuration("input.mp4")
    .then((duration) => {
        console.log(`Duration: ${duration} seconds`);
    })
    .catch((error) => {
        console.error("Error fetching duration:", error);
    });

Acknowledgments

This project uses FFmpeg and FFprobe, which are powerful open-source tools for handling multimedia data.

Additional Notes:

  1. Replace placeholders such as /path/to/ffmpeg with the actual path if needed.
  2. Ensure to mention any specific requirements or dependencies in the Installation section if applicable.
  3. The mediaDuration in the FFmpeg example should be calculated using the FFprobe class or known beforehand.

Changelog

v1.0.0 (2024-08-19)

  • First public release of the library