A clean, simple Node.js wrapper for FFmpeg that provides the most essential functions for most people—no bloat, just what you actually need. Promise-based API with async/await, no external dependencies, and built-in progress tracking.
FFmpeg must be installed on your system.
| OS | Command |
|---|---|
| macOS | brew install ffmpeg |
| Ubuntu/Debian | sudo apt install ffmpeg |
| Windows | Download from ffmpeg.org |
npm install essential-ffmpegFor detailed API documentation, command usage, and configuration options, please see the API Reference.
const { EssentialFFmpeg } = require('essential-ffmpeg');
const ffmpeg = new EssentialFFmpeg();
await ffmpeg.convert('input.mp4', 'output.avi', {
videoCodec: 'libx264',
audioCodec: 'aac'
});| Method | Description |
|---|---|
isAvailable() |
Check if FFmpeg is installed |
getInfo(input) |
Get media file information |
convert(input, output, options) |
Convert video format |
extractAudio(input, output, options) |
Extract audio from video |
extractVideo(input, output, options) |
Extract video without audio |
trim(input, output, options) |
Trim/cut video |
merge(inputs[], output, options) |
Merge multiple videos |
compress(input, output, options) |
Compress video |
addWatermark(video, watermark, output, options) |
Add watermark to video |
generateThumbnail(video, output, options) |
Generate thumbnail from video |
run(args, options) |
Run custom FFmpeg command |
{
videoCodec: 'libx264', // Video codec
audioCodec: 'aac', // Audio codec
videoBitrate: '1000k', // Video bitrate
audioBitrate: '128k', // Audio bitrate
fps: 30, // Frame rate
resolution: '1280x720', // Resolution
quality: 28, // CRF (18-28, lower = better)
preset: 'medium', // Encoding speed
overwrite: true // Overwrite output
}Presets: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow
Watermark Positions: top-left, top-right, bottom-left, bottom-right, center
try {
await ffmpeg.convert('input.mp4', 'output.avi');
} catch (error) {
console.error('Error:', error.message);
}npm testMIT