Linux: export and editor audio fail with EINVAL under comma-decimal locales (resampler-open)
維護者通常 1 天內回覆
還沒有人認領這個 Issue。
評估
- 難度
- 3/5
- 預估耗時
- 1-2 天
- 新手友好度
- 78/100
- Issue 類型
- 缺陷
- 描述清晰度
- 描述清楚
- 活躍度
- 活躍
- 技術堆疊
- rust
研究方向
Start in crates/audio/src/streaming.rs at the resampler configuration using filter_size and cutoff. Reproduce the failure with a comma-decimal locale, then verify the numeric option handling against the bundled FFmpeg libraries. Done means Studio export and editor system-audio preview work under pt_BR.UTF-8 while continuing to work under LC_NUMERIC=C.
由索引模型根據 Issue 內容生成。
描述
Description
On Linux with a locale that uses a comma as the decimal separator (pt_BR.UTF-8), every Studio recording fails to export:
Failed to export recording: Failed to load media: MultipleSegments 0 System Audio / resampler-open / Argumento inválido / next=0
("Argumento inválido" is the localized EINVAL.) Editor preview is also silent, and the log repeats:
WARN cap_editor::segments: Failed to load system audio track; continuing without it error=MultipleSegments 0 System Audio / resampler-open / Argumento inválido / next=0
I expected the export to succeed and the preview to play with system audio. The recorded system_audio.m4a is valid (AAC mono 48 kHz, plays fine in ffmpeg).
Root cause: crates/audio/src/streaming.rs configures the resampler with string options:
options.set("filter_size", "128");
options.set("cutoff", "0.97");
av_opt_set_dict parses "0.97" with strtod, which follows LC_NUMERIC. Under pt_BR the decimal separator is ,, so parsing fails and resampling::Context::get_with
returns EINVAL.
Suggested fix: set numeric options numerically (av_opt_set_double(ptr, "cutoff", 0.97, 0), av_opt_set_int(ptr, "filter_size", 128, 0)) before swr_init, or force
LC_NUMERIC=C at startup.
Workaround: launch Cap with LC_NUMERIC=C (e.g. Exec=env LC_NUMERIC=C Cap in a user .desktop override). Export and editor audio then work.
Reproduction
- On Linux, set
LANG=pt_BR.UTF-8/LC_NUMERIC=pt_BR.UTF-8(any comma-decimal locale). - Record a Studio recording with system audio.
- Open it in the editor and press play: no system audio.
- Export to MP4: the error above.
Minimal repro against Cap's bundled FFmpeg:
#include <locale.h>
#include <stdio.h>
#include <libavutil/channel_layout.h>
#include <libavutil/opt.h>
#include <libswresample/swresample.h>
int main(void) {
setlocale(LC_ALL, "");
AVChannelLayout mono = AV_CHANNEL_LAYOUT_MONO;
SwrContext *s = NULL;
swr_alloc_set_opts2(&s, &mono, AV_SAMPLE_FMT_FLT, 48000,
&mono, AV_SAMPLE_FMT_FLTP, 48000, 0, NULL);
printf("cutoff=%d\n", av_opt_set(s, "cutoff", "0.97", 0));
swr_free(&s);
}
$ cc repro.c -L/usr/lib/cap -l:libswresample.so.5 -l:libavutil.so.59 -Wl,-rpath,/usr/lib/cap
$ LC_ALL=pt_BR.UTF-8 ./a.out
[Eval] Invalid chars '.97' at the end of expression '0.97'
[SWR] Unable to parse option value "0.97"
cutoff=-22
$ LC_NUMERIC=C ./a.out
cutoff=0
Additional Context
- Cap version: 0.6.0 (
cap-binfrom the AUR) - Operating system, version: CachyOS (Arch Linux), kernel 7.2.3, Wayland / Hyprland
- Device (optional): AMD Ryzen 5 5600G, AMD Radeon RX 7600
Logs (~/.local/share/so.cap.desktop/logs/cap-desktop.log.2026-09-26):
2026-09-26T13:53:58.323416Z WARN cap_desktop_lib: System audio failed to load; returning empty waveform error=MultipleSegments 0 System Audio / resampler-open / Argumento
inválido / next=0
2026-09-26T13:54:05.551013Z WARN cap_editor::segments: Failed to load system audio track; continuing without it error=MultipleSegments 0 System Audio / resampler-open /
Argumento inválido / next=0
2026-09-26T14:04:31.970715Z WARN cap_desktop_lib: System audio failed to load; returning empty waveform error=MultipleSegments 0 System Audio / resampler-open / Argumento
inválido / next=0
2026-09-26T14:07:02.119598Z WARN cap_editor::segments: Failed to load system audio track; continuing without it error=MultipleSegments 0 System Audio / resampler-open /
Argumento inválido / next=0
Export diagnostic (cap-desktop.log.diagnostic-current.jsonl), 4 of 4 MP4 export attempts returned this:
{"time":"2026-09-26T14:14:11Z","app":"0.6.0","os":"linux","operation":"export_mp4","outcome":"returned_error","elapsedMs":4394,"fields":{"requested_fps":60,"requested_width":1
920,"requested_height":1080,"source_width":2560,"source_height":1440,"source_segments":1,"clips":1,"captions":false,"streaming_audio":false}}
- 主要語言
- Rust
- 星號
- 23.7k
- 分支
- 2.1k
- 平均合併
- 1 天 1 小時
- 30 天內合併 PR
- 694
環境準備
- 提供 Dockerfile 或 Docker Compose 檔案
- 沒有 Pull Request 範本
- 閱讀貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
CapSoftware/Cap 的其他 Issue
-
Web player intercepts ⌘⇧M and blocks Chrome profile-menu shortcut可能已有人在做 @AatmanAJ 於 16 天前認領。 未關閉
難度 2/5 1-3 小時 新手友好度 80/100
CapSoftware/Cap#2596 · 1 則留言 ·
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 68/100
CapSoftware/Cap#2384 · 2 則留言 ·
維護者通常 1 天內回覆
-
Dashboard pagination causes full page reloads on self-hosted Cap可能已有人在做 @Dewin 於 44 天前認領。 未關閉
難度 2/5 1-3 小時 新手友好度 88/100
CapSoftware/Cap#2305 · 2 則留言 ·
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 68/100
CapSoftware/Cap#1714 · 3 則留言 ·
維護者通常 1 天內回覆
-
難度 4/5 3-5 天 新手友好度 48/100
CapSoftware/Cap#3598 · 1 則留言 ·
維護者通常 1 天內回覆
相似的 Issue
-
bug duplicate enhancement priority: low ui
難度 2/5 1-3 小時 新手友好度 62/100
storytold/pdfcraft#5594 · 1 則留言 ·
維護者通常 1 天內回覆
-
documentation good first issue help wanted
難度 2/5 1-3 小時 新手友好度 86/100
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 68/100
維護者通常 1 天內回覆
-
難度 1/5 1 小時以內 新手友好度 85/100
open-jarvis/OpenJarvis#1212 ·
維護者通常 4 天內回覆
-
bug good first issue
難度 2/5 1-3 小時 新手友好度 84/100
CakeRepository/agentshangout#38 ·
維護者通常 1 天內回覆