Stimme in einem Video mit Sidon auf Modal bereinigen
Sprachwiederherstellung mit Sidon v0.1 (sarulab-speech/sidon-v0.1 auf Hugging Face), einem Audio-zu-Audio-Modell, das die Stimme bei 48 kHz neu synthetisiert. Es benötigt eine GPU, daher läuft das Modell auf Modal; alles andere (Extrahieren, Lautstärke, Remuxen) ist einfaches ffmpeg auf dem lokalen Rechner. Der Videostream wird nie neu kodiert.
Der Modal-Job ist scripts/sidon_enhance.py in diesem Plugin (${CLAUDE_PLUGIN_ROOT}/scripts/sidon_enhance.py).
Modellauswahl (warum Sidon)
| Modell | Urteil |
|---|---|
| Sidon v0.1 | Standard. Leicht; eine 11-minütige Datei lief in einem Job auf einer L4-Klasse-GPU für ein paar Cent. Ausgabe ist sauber, vollbandig, 48 kHz. |
| NVIDIA RE-USE | Behält mehr der spektralen Details des Sprechers, aber der GPU-Arbeitsspeicher reichte bei langen Dateien nicht aus (fehlgeschlagen beim zweiten 30-s-Chunk einer 11-minütigen Datei). Nur für kurze Clips verwenden. |
| DeepFilterNet | Ausgeschlossen: hörbare Verzerrung der Stimme. |
Sidon regeneriert alles über 8 kHz, daher ist das Ergebnis eine Stimme ohne Raum- oder Hintergrundgeräusche. Musik und andere Nicht-Sprachgeräusche in der Spur gehen verloren. Wenn das Video Musikbett hat, bereinigen Sie die Stimme, bevor Sie sie hinzufügen.
Einstellungen
Lesen Sie remote-video-editing/preferences.json unter dem ersten Datenstamm, der existiert: $CLAUDE_USER_DATA, dann ~/.claude-user-data, dann ${XDG_DATA_HOME:-~/.local/share}/claude-plugins. Schlüssel:
| Schlüssel | Standard | Bedeutung |
|---|---|---|
modal_command | modal | Befehl, der Modal-Apps ausführt (ein Wrapper, der ein Profil oder einen Workspace auswählt, ist in Ordnung) |
run_notes | keine | Freitext-Instruktionen, wo Modal ausgeführt werden soll (z. B. ein anderer Host, der die Authentifizierung hält) und wie Dateien dorthin gelangen. Beachten Sie diese. |
loudness_lufs | -14 | Integrierte Lautstärke-Zielvorgabe (YouTube-Stil) |
true_peak_db | -1.5 | True-Peak-Deckel |
Wenn keine Datei existiert und modal token nicht eingerichtet ist (modal profile current schlägt fehl), stoppen Sie und weisen Sie den Benutzer an, zuerst modal setup auszuführen.
Vorgehensweise
Arbeiten Sie in einem Ordner neben dem Quellvideo. IN=<video>, MODAL=<modal_command, default modal>.
- Audio extrahieren als mono 48 kHz FLAC:
ffmpeg -v error -y -i "$IN" -vn -ac 1 -ar 48000 -c:a flac -sample_fmt s16 audio.flac - Zuerst 30 Sekunden testen. Schneiden Sie einen Clip aus einem Abschnitt mit Sprache (nicht den ersten Sekunden):
Geben Sie dem Benutzer beide Dateien zum Anhören. Führen Sie den gesamten Track erst aus, wenn der Benutzer den Klang genehmigt.ffmpeg -v error -y -ss 60 -t 30 -i audio.flac -c:a flac test30.flac $MODAL run "${CLAUDE_PLUGIN_ROOT}/scripts/sidon_enhance.py" --src test30.flac --out test30_sidon.flac - Den gesamten Track ausführen:
Der Job gibt eine Zeile pro 96-s-Chunk aus. Beim ersten Lauf wird das Image erstellt (einige Minuten); spätere Läufe verwenden es wieder.$MODAL run "${CLAUDE_PLUGIN_ROOT}/scripts/sidon_enhance.py" --src audio.flac --out audio_sidon.flac - Lautstärke messen (erster Durchgang des Two-Pass-Loudnorm):
ffmpeg -hide_banner -nostats -i audio_sidon.flac \ -af loudnorm=I=-14:TP=-1.5:LRA=11:print_format=json -f null - 2>&1 | grep -A12 '^{' - Remuxen mit den gemessenen Werten. Das Video wird stream-copiert:
Bei HEVC-Quellen, die in Apple-Playern abgespielt werden müssen, fügen Sieffmpeg -v error -y -i "$IN" -i audio_sidon.flac -map 0:v -map 1:a -c:v copy \ -af "loudnorm=I=-14:TP=-1.5:LRA=11:measured_I=<input_i>:measured_TP=<input_tp>:measured_LRA=<input_lra>:measured_thresh=<input_thresh>:offset=<target_offset>:linear=true,aresample=48000" \ -c:a aac -b:a 192k -movflags +faststart "<name>_clean.mp4"-tag:v hvc1hinzu. - Überprüfen:
ffprobedie Dauer mit der Quelle vergleichen (sollte bis auf einen Frame übereinstimmen), und ein 30-s-Vorher/Nachher-Paar beim gleichen Offset schneiden (-vn -c:a copy), damit der Benutzer vergleichen kann.
Skriptbibliothek
Wenn der Benutzer eine Skriptbibliothek hat (find-script, save-script), überprüfen Sie diese, bevor Sie den Modal-Job ändern, und speichern Sie jede geänderte Version danach.
Kosten und Grenzen
- GPU-Liste im Skript: L4, A10G, L40S (je nachdem, was Modal frei hat). Timeout 1 Stunde.
- Die gesamte Datei wird als Bytes an die Funktion gesendet. In Ordnung für Sprachspuren bis zu ein oder zwei Stunden mono FLAC; bei längerem Material das Audio aufteilen, die Teile ausführen und mit ffmpeg
concatzusammenfügen. - Gewichte werden bei jedem Kaltstart von Hugging Face heruntergeladen (öffentlich, kein Token erforderlich).
Verwandt
Für lokale Bearbeitung, Rendering und Audioarbeit (Kdenlive, melt, ffmpeg-Voreinstellungen, Stille schneiden) siehe die Fertigkeit complementary-plugins in diesem Plugin.