1.0.0 • Published 11 months ago

wave.ffmpeg v1.0.0

Weekly downloads
-
License
ISC
Repository
-
Last release
11 months ago

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
1.0.0

11 months ago