@w3vish/ffmpeg-installer

A cross-platform FFmpeg binary installer for Node.js applications. This package provides a simple way to download and configure FFmpeg binaries for your platform, making it easy to use FFmpeg in your Node.js projects without manual installation.
⚠️ ESM Only
This package only supports ES Modules. CommonJS require() is not supported.
Installation
npm install @w3vish/ffmpeg-installer
After installation, run the CLI tool to install binaries:
npx @w3vish/ffmpeg-installer
The CLI will prompt you to select which components to install:
- FFmpeg and FFprobe (default)
- FFmpeg only
- FFprobe only
Usage
import FFmpegInstaller from '@w3vish/ffmpeg-installer';
console.log('FFmpeg path:', FFmpegInstaller.ffmpeg.path);
console.log('FFprobe path:', FFmpegInstaller.ffprobe.path);
console.log('FFmpeg version:', FFmpegInstaller.ffmpeg.version);
console.log('Platform:', FFmpegInstaller.platform);
console.log('Architecture:', FFmpegInstaller.arch);
With child_process
import { spawn } from 'child_process';
import FFmpegInstaller from '@w3vish/ffmpeg-installer';
const process = spawn(FFmpegInstaller.ffmpeg.path, [
'-i', 'input.mp4',
'-c:v', 'libx264',
'output.mp4'
]);
process.on('close', (code) => {
console.log(`Process exited with code ${code}`);
});
With fluent-ffmpeg
import ffmpeg from 'fluent-ffmpeg';
import FFmpegInstaller from '@w3vish/ffmpeg-installer';
ffmpeg.setFfmpegPath(FFmpegInstaller.ffmpeg.path);
ffmpeg.setFfprobePath(FFmpegInstaller.ffprobe.path);
ffmpeg('input.mp4')
.output('output.mp4')
.on('end', () => {
console.log('Conversion finished');
})
.run();
CLI Options
When running the installer CLI, you can specify options:
npx @w3vish/ffmpeg-installer --platform=darwin-arm64 --ffmpeg-only
Available options:
--platform=<platform>: Specify platform (win32-x64, darwin-arm64, linux-x64, etc.)
--ffmpeg-only: Install only FFmpeg
--ffprobe-only: Install only FFprobe
Supported Platforms
- Windows (win32-x64, win32-ia32)
- macOS (darwin-x64, darwin-arm64)
- Linux (linux-x64, linux-arm64, linux-armv7l)
Return Object Structure
The package exports an FFmpegInstaller object with this structure:
{
ffmpeg: {
path: '/path/to/ffmpeg',
version: 'v1.0.0',
url: 'https://github.com/w3vish/ffmpeg-installer/releases/download/v1.0.0/linux-x64-ffmpeg'
},
ffprobe: {
path: '/path/to/ffprobe',
version: 'v1.0.0',
url: 'https://github.com/w3vish/ffmpeg-installer/releases/download/v1.0.0/linux-x64-ffprobe'
},
platform: 'linux',
arch: 'x64'
}
TypeScript Types
The package includes TypeScript definitions:
export interface FFmpegInstaller {
ffmpeg?: BinaryInfo;
ffprobe?: BinaryInfo;
platform: string;
arch: string;
}
export interface BinaryInfo {
path: string;
version: string;
url: string;
}
Troubleshooting
Permission Issues
If you encounter permission errors when running the binaries on Linux/macOS:
chmod +x /path/to/ffmpeg
chmod +x /path/to/ffprobe
Installation Failures
If the installation fails, try:
npm install @w3vish/ffmpeg-installer --unsafe-perm
License
MIT