Skip to main content

How to run FFmpeg using NodeJS

· 2 min read

Setting up

This tutorial assumes you already have NodeJS installed

Use the following to set up a new folder and package.json file

mkdir ffmpeg-tutorial
cd ffmpeg ffmpeg-tutorial
npm init # enter ffmpeg-tutorial as the name and then skip through the rest

You should now have package.json which looks like the following:

"name": "ffmpeg-tutorial",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
"author": "",
"license": "ISC"

Next run the following to install FFmpeg:

npm i -s ffmpeg-static

And then create a new src folder with main.js inside.

mkdir src
touch src/main.js

Next make a data folder to store the input and output file:

mkdir data

Download the following sample file and put it into data folder. Rename it to input.mkv


Open up main.js and add the following:

const ffmpegPath = require('ffmpeg-static');
const childProcess = require('child_process');

const inputFile = `${process.cwd()}/data/input.mkv`;
const outputFile = `${process.cwd()}/data/output.mkv`;

// spawn an ffmpeg process
const child = childProcess.spawn(
// note, args must be an array when using spawn
// copy over the input streams of the input file to the output file
// transcode the file into hevc from h264

child.on('error', () => {
// catches execution error (bad file)
console.log(`Error executing binary: ${ffmpegPath}`);

child.stdout.on('data', (data) => {

child.stderr.on('data', (data) => {

child.on('close', (code) => {
console.log(`Process exited with code: ${code}`);
if (code === 0) {
console.log(`FFmpeg finished successfully`);
} else {
console.log(`FFmpeg encountered an error, check the console output`);

Run node ./src/main.js and FFmpeg should successfully transcode the file.


Get started using Tdarr transcode automation for free with this link: