|
|
@@ -28,6 +28,7 @@ import librosa
|
|
|
import soundfile as sf
|
|
|
import whisper
|
|
|
from loguru import logger
|
|
|
+from merge_asr_files import merge_and_delete_files
|
|
|
from tqdm import tqdm
|
|
|
|
|
|
from fish_speech.utils.file import AUDIO_EXTENSIONS, list_files
|
|
|
@@ -53,7 +54,7 @@ def main(model_size, audio_dir, save_dir, sample_rate, language):
|
|
|
|
|
|
save_path = Path(save_dir)
|
|
|
save_path.mkdir(parents=True, exist_ok=True)
|
|
|
-
|
|
|
+ original_files = []
|
|
|
audio_files = list_files(
|
|
|
path=audio_dir, extensions=AUDIO_EXTENSIONS, recursive=True
|
|
|
)
|
|
|
@@ -64,6 +65,11 @@ def main(model_size, audio_dir, save_dir, sample_rate, language):
|
|
|
rel_path = Path(file_path).relative_to(audio_dir)
|
|
|
(save_path / rel_path.parent).mkdir(parents=True, exist_ok=True)
|
|
|
|
|
|
+ if (save_path / rel_path.parent / f"{rel_path.stem}.wav").exists() and (
|
|
|
+ save_path / rel_path.parent / f"{rel_path.stem}.lab"
|
|
|
+ ).exists():
|
|
|
+ continue
|
|
|
+
|
|
|
audio, sr = librosa.load(file_path, sr=sample_rate, mono=False)
|
|
|
transcription = model.transcribe(str(file_path), language=language)
|
|
|
|
|
|
@@ -76,18 +82,26 @@ def main(model_size, audio_dir, save_dir, sample_rate, language):
|
|
|
)
|
|
|
|
|
|
extract = audio[..., int(start * sr) : int(end * sr)]
|
|
|
+ audio_save_path = (
|
|
|
+ save_path / rel_path.parent / f"{file_stem}_{id}{file_suffix}"
|
|
|
+ )
|
|
|
sf.write(
|
|
|
- save_path / rel_path.parent / f"{file_stem}_{id}{file_suffix}",
|
|
|
+ audio_save_path,
|
|
|
extract,
|
|
|
samplerate=sr,
|
|
|
)
|
|
|
+ original_files.append(audio_save_path)
|
|
|
|
|
|
+ transcript_save_path = save_path / rel_path.parent / f"{file_stem}_{id}.lab"
|
|
|
with open(
|
|
|
- save_path / rel_path.parent / f"{file_stem}_{id}.lab",
|
|
|
+ transcript_save_path,
|
|
|
"w",
|
|
|
encoding="utf-8",
|
|
|
) as f:
|
|
|
f.write(text)
|
|
|
+ original_files.append(transcript_save_path)
|
|
|
+
|
|
|
+ merge_and_delete_files(save_dir, original_files)
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|