SkillAgentSearch skills...

Gearr

A versatile video transcoding tool specialized in converting media files to the efficient x265 format.

Install / Use

/learn @pando85/Gearr
About this skill

Quality Score

0/100

Supported Platforms

Zed

README

<img height="24px" src="./server/web/ui/public/logo.svg" alt="Gearr"></img> Gearr

Warning: Use at your own risk! Gearr is currently in alpha stage and has not undergone extensive testing.

Gearr is an open-source video transcoding software designed to efficiently convert videos to the x265 format. It leverages the powerful ffmpeg library under the hood to ensure high-quality transcoding. Gearr also supports distributed transcoding across multiple agents, facilitating faster processing of video files.

Features

  • x265 Transcoding: Convert videos to the x265 format for improved compression and quality.
  • Distributed Transcoding: Utilize multiple agents to distribute transcoding tasks, speeding up the process.
  • Queue system: PostgreSQL-based message queue for managing transcoding job queues.
  • PGS Subtitle Conversion: Extract PGS subtitles from video files and convert them to STR format for wider compatibility.

Container Images

  • Server: ghcr.io/pando85/gearr:latest-server
  • Worker: ghcr.io/pando85/gearr:latest-worker
  • PGS Worker: ghcr.io/pando85/gearr:latest-worker-pgs

Configuration

Environment Variables

The application supports configuration through environment variables. Below is a table of supported environment variables and their default values:

Server

| Variable | Description | Default Value | | ------------------------ | ----------------------------------------------------- | --------------------- | | BROKER_HOST | Broker host address | localhost | | BROKER_PORT | Broker port | 5672 | | BROKER_USER | Broker username | broker | | BROKER_PASSWORD | Broker password | broker | | BROKER_TASKENCODEQUEUE | Broker tasks queue name for encoding | tasks | | BROKER_TASKPGSQUEUE | Broker tasks queue name for PGS to SRT conversion | tasks_pgstosrt | | BROKER_EVENTQUEUE | Broker tasks events queue name | task_events | | DATABASE_DRIVER | Database driver | postgres | | DATABASE_HOST | Database host address | localhost | | DATABASE_PORT | Database port | 5432 | | DATABASE_USER | Database username | postgres | | DATABASE_PASSWORD | Database password | postgres | | DATABASE_DATABASE | Database name | gearr | | DATABASE_SSLMODE | Database SSL mode | disable | | LOG_LEVEL | Log level (debug, info, warning, error, fatal) | info | | SCHEDULER_DOMAIN | Base domain for worker downloads and uploads | http://localhost:8080 | | SCHEDULER_SCHEDULETIME | Scheduling loop execution interval | 5m | | SCHEDULER_JOBTIMEOUT | Requeue jobs running for more than specified duration | 24h | | SCHEDULER_DOWNLOADPATH | Download path for workers | /data/current | | SCHEDULER_UPLOADPATH | Upload path for workers | /data/processed | | SCHEDULER_MINFILESIZE | Minimum file size for worker processing | 100000000 | | WEB_PORT | Web server port | 8080 | | WEB_TOKEN | Web server token | admin |

Worker

| Variable | Description | Default Value | | -------------------------- | ---------------------------------------------------------------- | -------------------------- | | BROKER_HOST | Broker host address | localhost | | BROKER_PORT | Broker port | 5672 | | BROKER_USER | Broker username | broker | | BROKER_PASSWORD | Broker password | broker | | BROKER_TASKENCODEQUEUE | Broker tasks queue name for encoding | tasks | | BROKER_TASKPGSQUEUE | Broker tasks queue name for PGS to SRT conversion | tasks_pgstosrt | | BROKER_EVENTQUEUE | Broker tasks events queue name | task_events | | LOG_LEVEL | Set the log level (options: "debug", "info", "warning", "error") | info | | WORKER_TEMPORALPATH | Path used for temporal data | system temporary directory | | WORKER_NAME | Worker name used for statistics | hostname | | WORKER_THREADS | Number of worker threads | number of CPU cores | | WORKER_ACCEPTEDJOBS | Type of jobs the worker will accept | ["encode"] | | WORKER_MAXPREFETCHJOBS | Maximum number of jobs to prefetch | 1 | | WORKER_ENCODEJOBS | Number of parallel worker jobs for encoding | 1 | | WORKER_PGJOBS | Number of parallel worker jobs for PGS to SRT conversion | 0 | | WORKER_DOTNETPATH | Path to the dotnet executable | "/usr/bin/dotnet" | | WORKER_PGSTOSRTDLLPATH | Path to the PGSToSrt.dll library | "/app/PgsToSrt.dll" | | WORKER_TESSERACTDATAPATH | Path to the tesseract data | "/tessdata" | | WORKER_STARTAFTER | Accept jobs only after the specified time (format: HH:mm) | - | | WORKER_STOPAFTER | Stop accepting new jobs after the specified time (format: HH:mm) | - | | SCHEDULER_DOMAIN | Base domain for worker downloads and uploads | http://localhost:8080 | | SCHEDULER_SCHEDULETIME | Scheduling loop execution interval | 5m | | SCHEDULER_JOBTIMEOUT | Requeue jobs running for more than specified duration | 24h | | SCHEDULER_DOWNLOADPATH | Download path for workers | /data/current | | SCHEDULER_UPLOADPATH | Upload path for workers | /data/processed | | SCHEDULER_MINFILESIZE | Minimum file size for worker processing | 100000000 | | WEB_PORT | Web server port | 8080 | | WEB_TOKEN | Web server token | admin |

Configuration File

The application also supports configuration through a YAML file. The default configuration file format is YAML. If you want to use a different file format, please specify it in the CONFIG_FILE environment variable.

Example YAML configuration file:

Server

logLevel: info

broker:
  host: localhost
  port: 5672
  user: broker
  password: broker
  taskEncodeQueue: tasks
  taskPGSQueue: tasks_pgstosrt
  eventQueue: task_events

database:
  Driver: postgres
  Host: localhost
  port: 5432
  User: postgres
  Password: postgres
  Database: gearr
  SSLMode: disable

scheduler:
  domain: http://localhost:8080
  scheduleTime: 5m
  jobTimeout: 24h
  downloadPath: /data/current
  uploadPath: /data/processed
  minFileSize: 100000000

web:
  port: 8080
  token: admin

Worker

broker:
  host: localhost
  port: 5672
  user: broker
  password: broker
  taskEncodeQueue: tasks
  taskPGSQueue: tasks_pgstosrt
  eventQueue: task_events

logLevel: info

worker:
  temporalPath: /path/to/temp/data
  name: my-worker
  threads: 4
  acceptedJobs:
    - encode
  maxPrefetchJobs: 2
  encodeJobs: 2
  pgJobs: 1
  dotnetPath: /usr/local/bin/dotnet
  pgsToSrtDLLPath: /custom/path/PgsToSrt.dll
  tesseractDataPath: /custom/tessdata
  startAfter: "08:00"
  stopAfter: "17:00"

Client Execution

Worker

DIR=/data/images/encode

mkdir -p $DIR
docker run -it -d --restart unless-stopped --cpuset-cpus 16-32 \
    --name gearr-worker --hostname $(hostname) \
    -v $DIR:/tmp/ ghcr.io/pando85/gearr:latest-worker \
    --broker.host gearr.example.com

Note: Adjust the --cpuset-cpus and other parameters according to your system specifications.

PGS Worker

DIR=/data/images/pgs

mkdir -p $DIR
docker run -it -d --restart unless-stopped \
    --name gearr-worker-pgs --hostname $(hostname) \
    -v $DIR:/tmp/ ghcr.io/pando85/gearr:latest-worker-pgs \
    --broker.host gearr.example.com

Warning: The PGS agent must be started in advance if PGS is detected. It should run before detection to ensure proper queue process

View on GitHub
GitHub Stars89
CategoryProduct
Updated1d ago
Forks1

Languages

Go

Security Score

95/100

Audited on Mar 26, 2026

No findings