Connect to remote ffmpeg servers
Use GPU-accelerated ffmpeg from anywhere — a Docker container, a VM, or a remote machine — without GPU passthrough or shared filesystems.
GPU transcoding is powerful, but getting access to the GPU is painful:
--runtime=nvidia, device mounts, and driver version alignment between host and containerYou just want your media server to use the GPU for transcoding. You shouldn't need to restructure your infrastructure to make that happen.
Run the ffmpeg-over-ip server on the host (or any machine with a GPU). Point your app at the client binary instead of ffmpeg. Done — your app gets GPU-accelerated transcoding without needing direct GPU access.
The client pretends to be ffmpeg. It forwards arguments to the server, which runs a patched ffmpeg that tunnels all file I/O back through the connection. Files are never stored on the server.
CLIENT (has files, no GPU) SERVER (has GPU)
======================== ===========================
Media server invokes "ffmpeg" Daemon listening on :5050
| |
ffmpeg-over-ip-client ffmpeg-over-ip-server
| |
+--------- TCP connection ------------>+
| |
Local filesystem patched ffmpeg
(real files) (file I/O tunneled back to client)
No GPU passthrough. No shared filesystem. No NFS. No SMB. Just one TCP port.
Releases include pre-built ffmpeg and ffprobe binaries with broad hardware acceleration support (NVENC, QSV, VAAPI, AMF, VideoToolbox, and more) — built on the jellyfin-ffmpeg pipeline. No need to install ffmpeg separately on either side.
One-line install. Each script downloads the latest release, prompts for host/port/auth secret, and writes a starter config file in the current directory.
On the GPU machine (server):
curl -fsSL https://ffmpeg-over-ip.com/install-server.sh | sh
irm https://ffmpeg-over-ip.com/install-server.ps1 | iex
On the media-server machine (client):
curl -fsSL https://ffmpeg-over-ip.com/install-client.sh | sh
irm https://ffmpeg-over-ip.com/install-client.ps1 | iex
Re-runs are idempotent — already-installed binaries and existing configs are left alone. For manual install or detailed setup, see docs/quick-start.md.
See docs/upgrading.md for migration guide and breaking changes.
See docs/configuration.md for full configuration reference (config file search paths, server/client options, rewrites, logging, address formats).
See docs/docker.md for Docker integration, Unix socket setup, and debugging tips.
ffmpeg-over-ip-client with normal ffmpeg argumentsMultiple clients can connect to the same server simultaneously — each session gets its own ffmpeg process.
| Client | Server + ffmpeg | |
|---|---|---|
| Linux x86_64 | ✓ | ✓ |
| Linux arm64 | ✓ | ✓ |
| macOS arm64 | ✓ | ✓ |
| macOS x86_64 | ✓ | ✓ |
| Windows x86_64 | ✓ | ✓ |
See docs/troubleshooting.md for common issues and debugging tips.
See CONTRIBUTING.md for build instructions, running tests, and project structure.
Split license — see LICENSE.md. The fio layer and ffmpeg patches (fio/, patches/) are GPL v3 (derived from ffmpeg). Everything else is MIT.
No open issues yet, or sync has not completed.