fix: force ffmpeg muxers for staged audio outputs · openclaw/openclaw@f686bb5
steipete
·
2026-05-15
·
via Recent Commits to openclaw:main
| Original file line number | Diff line number | Diff line change |
|---|
@@ -63,6 +63,7 @@ Docs: https://docs.openclaw.ai
|
63 | 63 | - Discord: report unresolved configured bot-token SecretRefs during startup instead of treating the account as unconfigured. (#82009) Thanks @giodl73-repo. |
64 | 64 | - Discord: pass an explicit Ogg muxer to ffmpeg when transcoding voice-message audio through staged temp files, restoring TTS voice-message delivery. Fixes #82074. Thanks @hwlbb. |
65 | 65 | - Discord/Feishu: allow Discord voice uploads through RFC2544 fake-IP proxy DNS and pass Feishu's voice ffmpeg transcode through an explicit Ogg muxer. (#82088) Thanks @hwlbb and @6peng888. |
| 66 | +- Audio/STT: pass explicit WAV/Ogg muxers to ffmpeg for whisper-cli and WhatsApp staged temp outputs so `.part` filenames do not break transcription or voice-message delivery. Fixes #82094. |
66 | 67 | - CLI/config: preserve numeric-looking object keys such as Discord guild IDs during `config patch` recursive merges. (#81999) Thanks @giodl73-repo. |
67 | 68 | - Gateway/OpenAI-compatible HTTP: forward `response_format` from `/v1/chat/completions` requests through agent stream params to upstream Chat Completions and Responses transports, restoring structured-output support. Fixes #82003. (#82004) Thanks @Lellansin. |
68 | 69 | - Control UI/WebChat: let sidebar markdown code-block Copy buttons use the same delegated clipboard handler as chat messages. (#58709) Thanks @tikitoki. |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -778,6 +778,7 @@ describe("deliverWebReply", () => {
|
778 | 778 | expect(ffmpegArgList).toContain("48000"); |
779 | 779 | expect(ffmpegArgList).toContain("-b:a"); |
780 | 780 | expect(ffmpegArgList).toContain("64k"); |
| 781 | +expect(ffmpegArgList.slice(-3, -1)).toEqual(["-f", "ogg"]); |
781 | 782 | const mediaPayload = requireRecord( |
782 | 783 | mockCallArg(msg.sendMedia, 0, 0, "sendMedia"), |
783 | 784 | "sendMedia payload", |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -214,6 +214,8 @@ async function transcodeToWhatsAppVoiceOpus(params: {
|
214 | 214 | "libopus", |
215 | 215 | "-b:a", |
216 | 216 | WHATSAPP_VOICE_BITRATE, |
| 217 | +"-f", |
| 218 | +"ogg", |
217 | 219 | outputPath, |
218 | 220 | ]); |
219 | 221 | }, |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -315,6 +315,8 @@ describe("web outbound", () => {
|
315 | 315 | "libopus", |
316 | 316 | "-b:a", |
317 | 317 | "64k", |
| 318 | +"-f", |
| 319 | +"ogg", |
318 | 320 | ]); |
319 | 321 | const outputPath = ffmpegArgs?.at(-1); |
320 | 322 | expect(outputPath).toContain("/fs-safe-output-"); |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -846,12 +846,21 @@ describe("applyMediaUnderstanding", () => {
|
846 | 846 | |
847 | 847 | expect(ctx.Transcript).toBe("whisper cpp ogg ok"); |
848 | 848 | const ffmpegArgs = getRunFfmpegArgs(); |
849 | | -expect(ffmpegArgs).toHaveLength(10); |
| 849 | +expect(ffmpegArgs).toHaveLength(12); |
850 | 850 | expect(ffmpegArgs.slice(0, 2)).toEqual(["-y", "-i"]); |
851 | 851 | expect(String(ffmpegArgs[2]).endsWith("telegram-voice.ogg")).toBe(true); |
852 | | -expect(ffmpegArgs.slice(3, 9)).toEqual(["-ac", "1", "-ar", "16000", "-c:a", "pcm_s16le"]); |
853 | | -expect(String(ffmpegArgs[9])).toContain("telegram-voice.wav"); |
854 | | -expect(String(ffmpegArgs[9]).endsWith(".part")).toBe(true); |
| 852 | +expect(ffmpegArgs.slice(3, 11)).toEqual([ |
| 853 | +"-ac", |
| 854 | +"1", |
| 855 | +"-ar", |
| 856 | +"16000", |
| 857 | +"-c:a", |
| 858 | +"pcm_s16le", |
| 859 | +"-f", |
| 860 | +"wav", |
| 861 | +]); |
| 862 | +expect(String(ffmpegArgs[11])).toContain("telegram-voice.wav"); |
| 863 | +expect(String(ffmpegArgs[11]).endsWith(".part")).toBe(true); |
855 | 864 | |
856 | 865 | const [command, args, options] = getRunExecCall(); |
857 | 866 | expect(command).toBe("whisper-cli"); |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -269,6 +269,8 @@ async function resolveCliMediaPath(params: {
|
269 | 269 | "16000", |
270 | 270 | "-c:a", |
271 | 271 | "pcm_s16le", |
| 272 | +"-f", |
| 273 | +"wav", |
272 | 274 | outputPath, |
273 | 275 | ]); |
274 | 276 | }, |
|
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。