Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

System FFmpeg should be preferred over bundled ffmpeg-static on Linux for GPU hardware acceleration

Aperta Adatta ai principianti
#757 0 commenti 1 reazione 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

@LangerSword ci sta già lavorando.

Dal 5/10/2026.

  • #1102 di @LangerSword — aperta

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
70/100
Tipo di issue
Funzionalità
Chiarezza
Specificata chiaramente
Stato di attività
Tranquilla
Stack tecnologico
electron, typescript

Direzione di ricerca

Entrambe le funzioni si trovano in electron/ipc/ffmpeg/binary.ts: getFfmpegBinaryPath() restituisce prima il ffmpeg-static incluso, e resolveSystemFfmpegBinaryPath() contiene la lista di ricerca hardcoded /opt/homebrew, /usr/local, /usr/bin. Leggi prima quel file e traccia quali chiamanti nel layer IPC di ffmpeg dipendono dal percorso restituito. Implementa l'Opzione A: su Linux restituire il binario di sistema da $PATH quando ne viene trovato uno, mantenere bundled-first su Windows e macOS, ed estendere i percorsi di ricerca. Fatto significa che un'esecuzione su Linux risolve il FFmpeg di sistema mentre i test esistenti di risoluzione del binario continuano a passare.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Problem Description

On Linux (specifically Arch Linux installed via AUR recordly-bin), Recordly always uses the bundled ffmpeg-static for video encoding/rendering, ignoring the system-installed FFmpeg. This means GPU hardware encoders (VAAPI, NVENC, CUDA) are never utilized even when available on the system.

Impact: Video export is significantly slower than it should be. On my Arch Linux system with an NVIDIA GPU, exports only use software encoding (libx264), taking 3-4x longer than expected. The GPU sits idle while the CPU is pegged at 100%.


Root Cause

In electron/ipc/ffmpeg/binary.ts, getFfmpegBinaryPath() has this priority:

  1. Bundled ffmpeg-static (first priority)
  2. System FFmpeg from $PATH (fallback only)

The bundled ffmpeg-static is compiled without GPU codec support (no --enable-vaapi, --enable-nvenc, --enable-cuda-llvm, etc.). This is expected for a portable static build — but on Linux desktops with GPUs, the system FFmpeg package (e.g., extra/ffmpeg on Arch) is typically compiled with full hardware acceleration support.

Additional Concern

The resolveSystemFfmpegBinaryPath() fallback also has a hardcoded Linux search order that may miss custom installs:

const commonPaths = [
    "/opt/homebrew/bin/ffmpeg",  // macOS path
    "/usr/local/bin/ffmpeg",
    "/usr/bin/ffmpeg",
];

Suggested Fixes

Option A — Platform-aware priority (recommended):
On Linux, if a system FFmpeg is found on $PATH, prefer it over the bundled one. Windows/macOS can keep the current behavior (bundled first), since their system FFmpeg is less commonly GPU-enabled.

Option B — Encoder capability detection:
Before falling back to libx264, query the bundled FFmpeg's available encoders. If it lacks hardware encoders (h264_vaapi, h264_nvenc, hevc_vaapi, hevc_nvenc, etc.) and the system FFmpeg has them, transparently switch to system FFmpeg.

Option C — Configuration setting:
Add a user-facing setting (e.g., environment variable RECORDLY_FFMPEG_PATH or a preference toggle Prefer system FFmpeg) to allow users to force using system FFmpeg.


Environment
  • Distro: Arch Linux (via AUR: recordly-bin)
  • GPU: NVIDIA GeForce (driver 570.133.08)
  • System FFmpeg: ffmpeg 7.1 (from extra/ffmpeg, compiled with --enable-cuda-llvm, --enable-nvenc, --enable-vaapi)
  • Recordly version: latest
Lingua principale
TypeScript
Stelle
32.4k
Fork
2.6k
Merge medio
1g 2h
PR unite (30g)
21

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di webadderallorg/Recordly

Tutte le issue di webadderallorg/Recordly

Issue simili

Altre issue su TypeScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.