{"id":21093802,"url":"https://github.com/crystalnet-org/grpc-ffmpeg","last_synced_at":"2026-02-06T17:17:26.908Z","repository":{"id":259077402,"uuid":"876264172","full_name":"CrystalNET-org/grpc-ffmpeg","owner":"CrystalNET-org","description":"gRPC-based service for executing FFmpeg commands on remote hosts / containers","archived":false,"fork":false,"pushed_at":"2024-11-23T12:08:21.000Z","size":98,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-26T19:05:26.437Z","etag":null,"topics":["distributed","docker","ffmpeg","grpc","jellyfin","jellyfin-ffmpeg","kubernetes","rffmpeg","transcoding"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CrystalNET-org.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-21T17:12:27.000Z","updated_at":"2025-02-01T19:02:56.000Z","dependencies_parsed_at":"2024-10-27T17:33:39.522Z","dependency_job_id":"78575aa8-c9cb-4df0-85b0-959021d3b357","html_url":"https://github.com/CrystalNET-org/grpc-ffmpeg","commit_stats":null,"previous_names":["crystalnet-org/grpc-ffmpeg"],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CrystalNET-org%2Fgrpc-ffmpeg","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CrystalNET-org%2Fgrpc-ffmpeg/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CrystalNET-org%2Fgrpc-ffmpeg/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CrystalNET-org%2Fgrpc-ffmpeg/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CrystalNET-org","download_url":"https://codeload.github.com/CrystalNET-org/grpc-ffmpeg/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248650750,"owners_count":21139681,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["distributed","docker","ffmpeg","grpc","jellyfin","jellyfin-ffmpeg","kubernetes","rffmpeg","transcoding"],"created_at":"2024-11-19T22:12:37.508Z","updated_at":"2026-02-06T17:17:26.873Z","avatar_url":"https://github.com/CrystalNET-org.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GRPC FFmpeg Service\r\n\r\n[![GPL3](https://img.shields.io/badge/license-GPLv3-blue)](#) [![last release](https://img.shields.io/github/v/release/CrystalNET-org/grpc-ffmpeg)](https://github.com/CrystalNET-org/grpc-ffmpeg/releases) [![Pipeline Status](https://ci.cluster.lan.crystalnet.org/api/badges/10/status.svg)](https://ci.cluster.lan.crystalnet.org/repos/10) [![Discord](https://dcbadge.limes.pink/api/server/Yj5AYwcGXu?style=flat)](https://discord.gg/Yj5AYwcGXu)\r\n## Overview\r\n\r\nThis project provides a gRPC-based service for executing FFmpeg commands. It consists of a server that processes FFmpeg commands and a client that sends commands to the server. The server is designed to be secure and configurable, with options for SSL and token-based authentication.\r\n\r\n## Directory Structure\r\n\r\n```\r\ngrpc-ffmpeg/\r\n├── src/\r\n│   ├── server/\r\n│   ├── client/\r\n│   └── proto/\r\n├── docs/\r\n├── docker/\r\n├── scripts/\r\n├── LICENSE\r\n├── README.md\r\n├── requirements.txt\r\n```\r\n\r\n## Getting Started\r\n\r\n### Prerequisites\r\n\r\n- Python 3.6+\r\n- Docker\r\n\r\nShared tmp directories between the client and worker containers (for jellyfin this would be the cache directory)\r\n\r\n### Environment Variables\r\n\r\nThe following environment variables can be set to configure the server and client:\r\n\r\n- `VALID_TOKEN`: The authentication token for the gRPC server (default: `my_secret_token`).\r\n- `ALLOWED_BINARIES`: The binaries allowed to be executed (default: `['ffmpeg', 'ffprobe', 'vainfo']`).\r\n- `BINARY_PATH_PREFIX`: The path prefix for the binaries (default: `/usr/bin/`).\r\n- `SSL_KEY_PATH`: The path to the SSL key file (default: `server.key`).\r\n- `SSL_CERT_PATH`: The path to the SSL certificate file (default: `server.crt`).\r\n- `USE_SSL`: Whether to use SSL (default: `false`).\r\n- `GRPC_HOST`: The hostname for the gRPC client to connect to (default: `ffmpeg-workers`).\r\n- `GRPC_PORT`: The port for the gRPC client to connect to (default: `50051`).\r\n- `CERTIFICATE_PATH`: The path to the SSL certificate for the client (default: `server.crt`).\r\n- `AUTH_TOKEN`: The authentication token for the client (default: `my_secret_token1`).\r\n\r\n### Example Usage\r\n\r\n#### Server\r\n\r\nStart the server with SSL:\r\n\r\n```bash\r\nexport USE_SSL=true\r\nexport SSL_KEY_PATH=/path/to/server.key\r\nexport SSL_CERT_PATH=/path/to/server.crt\r\nexport VALID_TOKEN=my_secret_token1\r\npython src/server/grpc-ffmpeg.py\r\n```\r\n\r\n#### Client\r\n\r\nSend a command to the server with SSL:\r\n\r\n```bash\r\nexport USE_SSL=true\r\nexport CERTIFICATE_PATH=/path/to/server.crt\r\nexport AUTH_TOKEN=my_secret_token1\r\npython src/client/grpc-ffmpeg.py \"ffmpeg -i input.mp4 output.mp4\"\r\n```\r\n\r\n### License\r\n\r\nThis project is licensed under the GPL3 License - see the [LICENSE](LICENSE) file for details.\r\n\r\n### Acknowledgements\r\n\r\n- [rFFmpeg](https://github.com/joshuaboniface/rffmpeg)\r\n- [FFmpeg](https://ffmpeg.org/)\r\n- [gRPC](https://grpc.io/)\r\n- [Protobuf](https://developers.google.com/protocol-buffers)\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrystalnet-org%2Fgrpc-ffmpeg","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcrystalnet-org%2Fgrpc-ffmpeg","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrystalnet-org%2Fgrpc-ffmpeg/lists"}