steelbrain/ffmpeg-over-ip: Connect to remote ffmpeg servers · GitHub

Use GPU-accelerated ffmpeg from anywhere – a Docker container, a VM, or a remote machine – without GPU passthrough or shared file systems.

GPU transcoding is powerful, but getting access to the GPU is painful:

  • docker container need --runtime=nvidiaDevice mount, and driver version alignment between host and container
  • virtual machines Requires PCIe passthrough or SR-IOV – complex setup that locks GPU to a VM
  • remote machines Requires shared file systems (NFS/SMB) with all the path mapping, mount maintenance and permission headaches that come with them

You just want your media server to use the GPU for transcoding. You should not need to restructure your infrastructure to do this.

Run the ffmpeg-over-ip server on the host (or any machine with a GPU). Point your app to the client binary instead of ffmpeg. Done – your app gets GPU-accelerated transcoding without requiring direct GPU access.

The client pretends to be ffmpeg. This forwards the arguments to the server, which runs a patched ffmpeg that tunnels all file I/O through the connection. The 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 file system. No NFS. No SMB. Just a TCP port.

The release includes pre-built FFmpeg and FFProbe binaries with extensive hardware acceleration support (NVNC, QSV, VAAPI, AMF, VideoToolbox, and more) – built on the Jellyfin-FFMPEG pipeline. No need to install ffmpeg separately on both sides.

See docs/quick-start.md to get up and running in minutes.

See docs/upgrading.md for migration guide and important changes.

See docs/configuration.md for complete configuration reference (config file search paths, server/client options, rewriting, logging, address formats).

See docs/docker.md for Docker integration, Unix socket setup, and debugging tips.

  1. your media server calls ffmpeg-over-ip-client with normal ffmpeg arguments
  2. The client connects to the server and sends commands with HMAC authentication.
  3. The server launches its patched ffmpeg, which reads all the files and writes back to the client
  4. stdout/stderr are forwarded in real time; When ffmpeg exits, the client exits with the same code

Multiple clients can connect to the same server simultaneously – each session gets its own ffmpeg process.

Customer 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, ongoing tests, and project structure.

  • authentication: HMAC-SHA256 with a shared secret. Every order has been signed.
  • single port: Only the server listens on the port. The client only makes outbound connections.

Split license – see LICENSE.md. FIO layer and FFMPEG patch (fio/, patches/) are GPL v3 (derived from FFMPEG). Everything else is MIT.



<a href

Leave a Comment