mirror of
https://github.com/Monadical-SAS/reflector.git
synced 2025-12-20 20:29:06 +00:00
fix: Skip mixdown for multitrack (#760)
* multitrack mixdown optimisation * skip mixdown for multitrack * skip mixdown for multitrack --------- Co-authored-by: Igor Loskutov <igor.loskutoff@gmail.com>
This commit is contained in:
@@ -31,6 +31,7 @@ from reflector.processors import AudioFileWriterProcessor
|
|||||||
from reflector.processors.audio_waveform_processor import AudioWaveformProcessor
|
from reflector.processors.audio_waveform_processor import AudioWaveformProcessor
|
||||||
from reflector.processors.types import TitleSummary
|
from reflector.processors.types import TitleSummary
|
||||||
from reflector.processors.types import Transcript as TranscriptType
|
from reflector.processors.types import Transcript as TranscriptType
|
||||||
|
from reflector.settings import settings
|
||||||
from reflector.storage import Storage, get_transcripts_storage
|
from reflector.storage import Storage, get_transcripts_storage
|
||||||
from reflector.utils.daily import (
|
from reflector.utils.daily import (
|
||||||
filter_cam_audio_tracks,
|
filter_cam_audio_tracks,
|
||||||
@@ -631,11 +632,21 @@ class PipelineMainMultitrack(PipelineMainBase):
|
|||||||
|
|
||||||
transcript.data_path.mkdir(parents=True, exist_ok=True)
|
transcript.data_path.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
|
if settings.SKIP_MIXDOWN:
|
||||||
|
self.logger.warning(
|
||||||
|
"SKIP_MIXDOWN enabled: Skipping mixdown and waveform generation. "
|
||||||
|
"UI will have no audio playback or waveform.",
|
||||||
|
num_tracks=len(padded_track_urls),
|
||||||
|
transcript_id=transcript.id,
|
||||||
|
)
|
||||||
|
else:
|
||||||
mp3_writer = AudioFileWriterProcessor(
|
mp3_writer = AudioFileWriterProcessor(
|
||||||
path=str(transcript.audio_mp3_filename),
|
path=str(transcript.audio_mp3_filename),
|
||||||
on_duration=self.on_duration,
|
on_duration=self.on_duration,
|
||||||
)
|
)
|
||||||
await self.mixdown_tracks(padded_track_urls, mp3_writer, offsets_seconds=None)
|
await self.mixdown_tracks(
|
||||||
|
padded_track_urls, mp3_writer, offsets_seconds=None
|
||||||
|
)
|
||||||
await mp3_writer.flush()
|
await mp3_writer.flush()
|
||||||
|
|
||||||
if not transcript.audio_mp3_filename.exists():
|
if not transcript.audio_mp3_filename.exists():
|
||||||
@@ -650,7 +661,9 @@ class PipelineMainMultitrack(PipelineMainBase):
|
|||||||
await transcript_storage.put_file(storage_path, mp3_file)
|
await transcript_storage.put_file(storage_path, mp3_file)
|
||||||
mp3_url = await transcript_storage.get_file_url(storage_path)
|
mp3_url = await transcript_storage.get_file_url(storage_path)
|
||||||
|
|
||||||
await transcripts_controller.update(transcript, {"audio_location": "storage"})
|
await transcripts_controller.update(
|
||||||
|
transcript, {"audio_location": "storage"}
|
||||||
|
)
|
||||||
|
|
||||||
self.logger.info(
|
self.logger.info(
|
||||||
f"Uploaded mixed audio to storage",
|
f"Uploaded mixed audio to storage",
|
||||||
|
|||||||
@@ -138,6 +138,14 @@ class Settings(BaseSettings):
|
|||||||
DAILY_WEBHOOK_UUID: str | None = (
|
DAILY_WEBHOOK_UUID: str | None = (
|
||||||
None # Webhook UUID for this environment. Not used by production code
|
None # Webhook UUID for this environment. Not used by production code
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Multitrack processing
|
||||||
|
# SKIP_MIXDOWN: When True, skips audio mixdown and waveform generation.
|
||||||
|
# Transcription still works using individual tracks. Useful for:
|
||||||
|
# - Diagnosing OOM issues in mixdown
|
||||||
|
# - Fast processing when audio playback is not needed
|
||||||
|
# Note: UI will have no audio playback or waveform when enabled.
|
||||||
|
SKIP_MIXDOWN: bool = True
|
||||||
# Platform Configuration
|
# Platform Configuration
|
||||||
DEFAULT_VIDEO_PLATFORM: Platform = WHEREBY_PLATFORM
|
DEFAULT_VIDEO_PLATFORM: Platform = WHEREBY_PLATFORM
|
||||||
|
|
||||||
|
|||||||
@@ -117,15 +117,6 @@ export default function TranscriptDetails(details: TranscriptDetails) {
|
|||||||
return <Modal title="Loading" text={"Loading transcript..."} />;
|
return <Modal title="Loading" text={"Loading transcript..."} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mp3.error) {
|
|
||||||
return (
|
|
||||||
<Modal
|
|
||||||
title="Transcription error"
|
|
||||||
text={`There was an error loading the recording. Error: ${mp3.error}`}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Grid
|
<Grid
|
||||||
@@ -147,7 +138,12 @@ export default function TranscriptDetails(details: TranscriptDetails) {
|
|||||||
/>
|
/>
|
||||||
) : !mp3.loading && (waveform.error || mp3.error) ? (
|
) : !mp3.loading && (waveform.error || mp3.error) ? (
|
||||||
<Box p={4} bg="red.100" borderRadius="md">
|
<Box p={4} bg="red.100" borderRadius="md">
|
||||||
<Text>Error loading this recording</Text>
|
<Text>
|
||||||
|
Error loading{" "}
|
||||||
|
{[waveform.error && "waveform", mp3.error && "mp3"]
|
||||||
|
.filter(Boolean)
|
||||||
|
.join(" and ")}
|
||||||
|
</Text>
|
||||||
</Box>
|
</Box>
|
||||||
) : (
|
) : (
|
||||||
<Skeleton h={14} />
|
<Skeleton h={14} />
|
||||||
|
|||||||
Reference in New Issue
Block a user