diff --git a/src/components/video-editor/VideoEditor.tsx b/src/components/video-editor/VideoEditor.tsx
index ea4ae6a7..9c99b88d 100644
--- a/src/components/video-editor/VideoEditor.tsx
+++ b/src/components/video-editor/VideoEditor.tsx
@@ -4454,7 +4454,7 @@ export default function VideoEditor() {
{isRenderingAudio ? (
- Processing audio with speed/overlay edits
+ {t("editor.export.processingAudioEdits", "Processing audio with speed/overlay edits")}
) : exportRenderSpeedLabel ? (
diff --git a/src/lib/exporter/audioEncoder.ts b/src/lib/exporter/audioEncoder.ts
index 8a2eec61..154b0e4b 100644
--- a/src/lib/exporter/audioEncoder.ts
+++ b/src/lib/exporter/audioEncoder.ts
@@ -1149,17 +1149,8 @@ export class AudioProcessor {
const source = await resolveMediaElementSource(url);
try {
const media = document.createElement("video");
- media.src = source.src;
media.preload = "metadata";
-
- if (
- Number.isFinite(media.duration) &&
- media.readyState >= HTMLMediaElement.HAVE_METADATA
- ) {
- const duration = media.duration;
- media.src = "";
- return duration;
- }
+ media.src = source.src;
return await new Promise((resolve, reject) => {
const timeout = setTimeout(() => {
diff --git a/src/lib/exporter/modernVideoExporter.ts b/src/lib/exporter/modernVideoExporter.ts
index 275b7500..e2cf013e 100644
--- a/src/lib/exporter/modernVideoExporter.ts
+++ b/src/lib/exporter/modernVideoExporter.ts
@@ -434,6 +434,11 @@ export class ModernVideoExporter {
"muxing queued video chunks",
);
+ // Surface muxing errors before proceeding with finalization
+ if (this.encoderError) {
+ throw this.encoderError;
+ }
+
if (nativeAudioPlan.audioMode !== "none" && !shouldUseFfmpegAudioFallback && !this.cancelled) {
const demuxer = this.streamingDecoder.getDemuxer();
if (
@@ -1399,8 +1404,9 @@ export class ModernVideoExporter {
}
} catch (error) {
console.error("Muxing error:", error);
+ const muxingError = error instanceof Error ? error : new Error(String(error));
if (!this.encoderError) {
- this.encoderError = error instanceof Error ? error : new Error(String(error));
+ this.encoderError = muxingError;
}
this.cancelled = true;
}
diff --git a/src/lib/exporter/videoExporter.ts b/src/lib/exporter/videoExporter.ts
index 0202da9e..43d345c3 100644
--- a/src/lib/exporter/videoExporter.ts
+++ b/src/lib/exporter/videoExporter.ts
@@ -293,6 +293,11 @@ export class VideoExporter {
"muxing queued video chunks",
);
+ // Surface muxing errors before proceeding with finalization
+ if (this.encoderError) {
+ throw this.encoderError;
+ }
+
if (hasAudio && !shouldUseFfmpegAudioFallback && !this.cancelled) {
const demuxer = this.streamingDecoder.getDemuxer();
if (demuxer || hasAudioRegions || hasSourceAudioFallback) {
@@ -979,6 +984,11 @@ export class VideoExporter {
}
} catch (error) {
console.error("Muxing error:", error);
+ const muxingError = error instanceof Error ? error : new Error(String(error));
+ if (!this.encoderError) {
+ this.encoderError = muxingError;
+ }
+ this.cancelled = true;
}
});
this.encodeQueue--;