DEV Community

Javid Jamae
Javid Jamae

Posted on • Originally published at ffmpeg-micro.com

n8n Execute Command Node vs. FFmpeg API: Why Cloud Users Are Switching

Originally published at ffmpeg-micro.com.

You built a video processing workflow in n8n using the Execute Command node. It worked on your laptop. Then you deployed to n8n Cloud and nothing happened.

That's because n8n Cloud doesn't include FFmpeg. And even if you're self-hosting, the Execute Command node is disabled by default since n8n v2.0 for security reasons. You can re-enable it, but now you're maintaining a custom Docker image with FFmpeg baked in, managing dependencies, and hoping nothing breaks on the next update.

There's a simpler approach: skip Execute Command entirely and call an FFmpeg API from an HTTP Request node.

Why the Execute Command Node Breaks for FFmpeg

The Execute Command node runs shell commands on the n8n server. For FFmpeg, that means the server needs FFmpeg installed, enough CPU and RAM to process video, and disk space for temp files.

On n8n Cloud, this is a non-starter. The hosted environment doesn't ship FFmpeg, and you can't install system packages. Your workflow just fails silently or throws a "command not found" error.

On self-hosted n8n, you have two problems. First, the Execute Command node is disabled by default in n8n v2.0 and later. The n8n team locked it down because arbitrary shell execution is a security risk in shared environments. You need to set the NODES_EXCLUDE environment variable or use N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true plus additional config to re-enable it.

Second, even after re-enabling it, you need FFmpeg on the server. The official n8n Docker image doesn't include it. So you're building a custom Dockerfile, installing FFmpeg, keeping it updated, and making sure your server has enough resources to handle video transcoding alongside your n8n workflows.

If you're processing one video a week, that might be fine. If you're building anything production-grade, it becomes a maintenance headache fast.

How an FFmpeg API Replaces Execute Command

Instead of running FFmpeg on your n8n server, you offload the processing to a cloud API. The workflow stays in n8n, but the heavy lifting happens somewhere else.

FFmpeg Micro is a cloud API built specifically for this. One HTTP request, and your video gets processed on auto-scaling infrastructure. No FFmpeg install. No Docker customization. Works on n8n Cloud and self-hosted identically.

The pattern is simple: replace your Execute Command node with an HTTP Request node that calls the FFmpeg Micro API.

Setting Up FFmpeg Processing in n8n (Without Execute Command)

You need two things: an FFmpeg Micro API key (free tier available at ffmpeg-micro.com) and an HTTP Request node in your n8n workflow.

Start a Transcode Job

Add an HTTP Request node with these settings:

  • Method: POST
  • URL: https://api.ffmpeg-micro.com/v1/transcodes
  • Authentication: Header Auth, name Authorization, value Bearer YOUR_API_KEY
  • Body (JSON):
{
  "inputs": [{"url": "https://your-bucket.s3.amazonaws.com/video.mp4"}],
  "outputFormat": "mp4",
  "preset": {"quality": "medium", "resolution": "720p"}
}
Enter fullscreen mode Exit fullscreen mode

The inputs field takes an array of objects, each with a url pointing to your source video. The API supports MP4, WebM, MOV, AVI, MKV, and more.

For finer control, swap preset for raw FFmpeg options:

{
  "inputs": [{"url": "https://your-bucket.s3.amazonaws.com/video.mp4"}],
  "outputFormat": "webm",
  "options": [
    {"option": "-c:v", "argument": "libvpx-vp9"},
    {"option": "-crf", "argument": "30"},
    {"option": "-b:v", "argument": "0"}
  ]
}
Enter fullscreen mode Exit fullscreen mode

This gives you the same power as a raw FFmpeg command line, without installing anything.

Check Job Status

Add a second HTTP Request node (or use a loop with a Wait node):

  • Method: GET
  • URL: https://api.ffmpeg-micro.com/v1/transcodes/{{ $json.jobId }}
  • Authentication: Same Bearer token

The response includes status (queued, processing, completed, failed) and a progress percentage. When status is completed, the output is ready for download.

Download the Result

  • Method: GET
  • URL: https://api.ffmpeg-micro.com/v1/transcodes/{{ $json.jobId }}/download
  • Authentication: Same Bearer token

This returns a signed download URL for your processed video.

n8n Execute Command vs. FFmpeg API: Side by Side

Factor Execute Command + FFmpeg HTTP Request + FFmpeg Micro
n8n Cloud Not supported Works out of the box
n8n v2.0+ Disabled by default No restrictions
FFmpeg install Required on server Not needed
Server resources CPU/RAM used for processing Offloaded to cloud
Scaling Limited by server capacity Auto-scales
Maintenance Custom Docker image, updates Zero
Setup time Hours (Docker, FFmpeg, config) Minutes (API key + HTTP node)

When to Keep Using Execute Command

If you're running n8n self-hosted, have FFmpeg installed already, and your processing volume is low and predictable, Execute Command still works. It's free (beyond your server costs) and keeps everything local.

But the moment you hit any of these, it's time to switch: deploying to n8n Cloud, processing more than a handful of videos per day, needing consistent output quality across different input formats, or wanting your workflow to survive an n8n version upgrade without breaking.

FAQ

Can I install FFmpeg on n8n Cloud?

No. n8n Cloud is a managed environment and you can't install system packages. The only way to use FFmpeg from n8n Cloud is through an external API like FFmpeg Micro.

Is the Execute Command node safe to re-enable?

It depends on your setup. The n8n team disabled it by default in v2.0 because arbitrary shell execution is a security risk, especially in multi-user environments. If you're the only user on a locked-down server, the risk is lower. But the API approach avoids the question entirely.

How much does FFmpeg Micro cost for n8n workflows?

FFmpeg Micro has a free tier that covers light usage. Paid plans start at $19/month for higher volumes. You pay per minute of video processed, so costs scale with actual usage rather than server uptime.

Can I use FFmpeg Micro with n8n's webhook triggers?

Yes. A common pattern is: webhook receives a video URL, HTTP Request node sends it to FFmpeg Micro for processing, a Wait/loop polls for completion, then another HTTP Request downloads the result. The entire workflow runs in n8n with zero local FFmpeg dependency.

What video formats does FFmpeg Micro support?

FFmpeg Micro supports MP4, WebM, AVI, MOV, MKV, FLV for video, plus MP3, AAC, WAV, OGG, FLAC and more for audio. You can also output to image formats like JPEG, PNG, and WebP for thumbnail extraction.

FFmpeg Micro gives you FFmpeg's full processing power through a simple API. Sign up for a free account and swap out that Execute Command node in about five minutes.

Top comments (0)