System FFmpeg should be preferred over bundled ffmpeg-static on Linux for GPU hardware acceleration
I maintainer di solito rispondono entro 1 giorno
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
- Ambito
- desktop-dev, performance
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:
- Bundled
ffmpeg-static(first priority) - 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(fromextra/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
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di webadderallorg/Recordly
-
fix(audio): deduplicate getSourceTrackIdFromPath and fix companion track misclassificationForse già presa @SomSamantray l’ha presa 2 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
webadderallorg/Recordly#1124 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
webadderallorg/Recordly#1129 · 3 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Mac system audio issuesAperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
webadderallorg/Recordly#1128 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
webadderallorg/Recordly#1125 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 12/100
webadderallorg/Recordly#1122 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di webadderallorg/Recordly
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
NaturalIntelligence/fast-xml-parser#890 · 1 commento ·
I maintainer di solito rispondono entro 3 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
zsviczian/obsidian-excalidraw-plugin#3000 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
pnpm/get.pnpm.io#68 ·
-
[BUG] Cloudflare KV binding 模式下 kvDriver.list() 沿用 EdgeOne 语义,字段名不匹配导致 key 格式下初始化 500 并耗尽 list 配额Forse già presa @wumingzhinu l’ha presa oggi. Apertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 64/100
OpenListTeam/OpenList-Worker#125 ·
I maintainer di solito rispondono entro 2 giorni
-
Android (vision-camera-location): HybridLocationManager never quits its HandlerThread on disposeAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
margelo/react-native-vision-camera#4217 ·
I maintainer di solito rispondono entro 4 giorni