PowerShell-Script zum automatischen Aufteilen von Multi-Channel WAV-Dateien (wie sie z.B. vom Behringer X32 erstellt werden) in einzelne Mono-Kanäle mit konfigurierbaren Kanalnamen, paralleler Verarbeitung und optimierten ffmpeg-Parametern.
- Automatisches Multi-Channel Splitting: Teilt WAV-Dateien mit bis zu 32 Kanälen in einzelne Mono-Dateien auf
- Parallele Verarbeitung: Verarbeitet mehrere Ordner gleichzeitig für maximale Performance
- PowerShell 7+: Moderne
ForEach-Object -ParallelImplementierung - PowerShell 5.1: Job-basierte Parallelverarbeitung
- PowerShell 7+: Moderne
- FFmpeg 7+ Optimierung: Batch-Processing für bis zu 3x schnellere Verarbeitung
- Konfigurierbare Kanalnamen: Definiere eigene Namen für jeden Kanal
- Channel Skipping: Überspringe ungenutzte Kanäle
- Flexible Präfixe: Optional Ordnername als Präfix oder kein Präfix
- Subfolder-Support: Optional separate Unterordner für gesplittete Dateien
- Bit-Depth Konvertierung: Automatisch oder manuell (16/24/32 Bit)
- Intelligente Erkennung: Überspringt bereits verarbeitete Ordner
-
PowerShell: Version 5.1 oder höher
- Windows: Integriert in Windows 10/11
- Für optimale Performance: PowerShell 7+
-
FFmpeg: Version 6 oder höher (Version 7+ empfohlen)
- Download: ffmpeg.org
- FFmpeg muss in
PATHverfügbar sein
Prüfe ob FFmpeg installiert ist:
ffmpeg -version
ffprobe -versionPrüfe PowerShell Version:
$PSVersionTable.PSVersionLade Split.ps1 und split.cfg. Platziere die Dateien im gleichen Verzeichnis.
.\Split.ps1Das Script:
- Lädt die Config-Datei
split.cfg - Durchsucht alle Unterordner im konfigurierten
BasePath - Findet Ordner mit genau einer WAV-Datei
- Splittet die WAV-Datei in 32 Kanäle (oder weniger, je nach Config)
- Speichert die Kanäle mit den konfigurierten Namen
Vorher:
h:\X_LIVE\
├── 5C53A647\
│ └── 00000001.wav (32 Kanäle)
├── 5C53AB5D\
│ └── 00000001.wav (32 Kanäle)
Nachher (mit CreateSubfolderForChannels = true):
h:\X_LIVE\
├── 5C53AB5D\
│ ├── 00000001.wav (Original)
│ └── channels\
│ ├── 5C53AB5D-01 Kick.wav
│ ├── 5C53AB5D-02 Snare.wav
│ ├── 5C53AB5D-03 HiHat.wav
│ └── ...
Nachher (mit UseFolderNameAsPrefix = false):
h:\X_LIVE\
├── 5C53AB5D\
│ ├── 00000001.wav (Original)
│ └── channels\
│ ├── 01 Kick.wav
│ ├── 02 Snare.wav
│ ├── 03 HiHat.wav
│ └── ...
Die Config-Datei verwendet INI-Format mit zwei Sections: [Options] und [Channels].
| Option | Typ | Standard | Beschreibung |
|---|---|---|---|
BasePath |
String | - | Pflicht: Haupt-Verzeichnis mit den zu verarbeitenden Ordnern |
BitDepth |
String | auto |
Ziel Bit-Tiefe: auto, 16, 24, 32 |
VerboseOutput |
Boolean | false |
Detaillierte Ausgaben während der Verarbeitung |
CreateSubfolderForChannels |
Boolean | true |
Erstellt channels\ Unterordner für gesplittete Dateien |
ParallelProcessing |
Boolean | true |
Aktiviert parallele Verarbeitung mehrerer Ordner |
MaxParallelJobs |
Integer | CPU-Kerne | Maximale Anzahl gleichzeitiger Jobs |
UseFolderNameAsPrefix |
Boolean | true |
Nutzt Ordnernamen als Datei-Präfix |
BasePath
- Absoluter oder relativer Pfad
- Beispiele:
h:\X_LIVE(absolut)Recordings(relativ zum Script-Ordner)
BitDepth
auto: Behält Original Bit-Tiefe bei16: Konvertiert zu 16-bit PCM24: Konvertiert zu 24-bit PCM32: Konvertiert zu 32-bit PCM
ParallelProcessing
true: Mehrere Ordner werden gleichzeitig verarbeitetfalse: Sequentielle Verarbeitung (langsamer, aber weniger Ressourcen)
MaxParallelJobs
- Empfehlung: 50-75% der CPU-Kerne
- Beispiel: 8-Kern CPU →
MaxParallelJobs = 4-6
UseFolderNameAsPrefix
true: Dateiname =Ordnername-01 Kick.wavfalse: Dateiname =01 Kick.wav(ohne Präfix)
Definiert Namen für jeden Kanal (1-32).
Format:
[Channels]
KanalNummer = KanalNameSpezielle Werte:
(Skip): Kanal wird nicht exportiert- Leerer Wert: Kanal wird nicht exportiert
- Beliebiger Text: Wird als Kanalname verwendet
Beispiel:
[Channels]
1 = Kick
2 = Snare
3 = (Skip) # Wird übersprungen
4 = # Wird übersprungen
5 = TomConfig:
[Options]
BasePath = D:\Recordings
BitDepth = 24
CreateSubfolderForChannels = true
ParallelProcessing = true
MaxParallelJobs = 4
UseFolderNameAsPrefix = true
[Channels]
1 = Kick
2 = Snare
3 = HiHat
4 = Tom1
5 = Tom2
6 = Floor Tom
7 = OH L
8 = OH R
9 = Bass DI
10 = Bass Amp
11 = (Skip)
12 = (Skip)
13 = (Skip)
14 = (Skip)
15 = (Skip)
16 = (Skip)
17 = (Skip)
18 = (Skip)
19 = (Skip)
20 = (Skip)
21 = (Skip)
22 = (Skip)
23 = Vocal
24-32 = (Skip)Ergebnis:
- Ordner:
2024-SessionXYZ - Output:
2024-SessionXYZ-01 Kick.wav,2024-SessionXYZ-02 Snare.wav, etc. - Kanäle 11-22 und 24-32 werden übersprungen
Config:
[Options]
BasePath = E:\LiveShows
BitDepth = auto
CreateSubfolderForChannels = false
UseFolderNameAsPrefix = false
[Channels]
1 = Kick
2 = Snare
3 = Bass
4 = Guitar L
5 = Guitar R
6 = Vocal
7-32 = (Skip)Ergebnis:
- Ordner:
LiveShow-2024-12-25 - Output direkt im Ordner:
01 Kick.wav,02 Snare.wav,03 Bass.wav, etc. - Nur 6 Dateien werden erstellt
Config:
[Options]
BasePath = F:\BigProject
BitDepth = 32
ParallelProcessing = true
MaxParallelJobs = 12 # Für 16-Kern CPU
CreateSubfolderForChannels = true
UseFolderNameAsPrefix = true
VerboseOutput = false # Weniger Konsolen-Output = schnellerTestsystem: AMD Ryzen 9 5950X (16 Kerne), SSD, FFmpeg 7.0
| Szenario | Sequentiell | Parallel (PS 5.1) | Parallel (PS 7+) |
|---|---|---|---|
| 1 Datei (2GB, 32 Kanäle) | ~60s | ~60s | ~20s* |
| 10 Dateien | ~600s | ~75s | ~80s |
| 50 Dateien | ~3000s | ~375s | ~400s |
* FFmpeg 7+ Batch-Processing Vorteil
-
Nutze PowerShell 7+ für beste Performance
-
FFmpeg 7+ für Batch-Processing (3x schneller pro Datei)
-
SSD statt HDD für Output-Verzeichnis
-
MaxParallelJobs optimieren:
- Zu wenig: Verschenkte Performance
- Zu viel: Ressourcen-Überlastung
- Sweet Spot: 50-75% der CPU-Kerne
-
VerboseOutput = false für schnellere Verarbeitung
-
BitDepth = auto vermeidet unnötige Konvertierung
| OS | PowerShell 5.1 | PowerShell 7+ | Status |
|---|---|---|---|
| Windows 10/11 | ✅ Integriert | ✅ Optional | Vollständig |
| Windows Server 2016+ | ✅ Integriert | ✅ Optional | Vollständig |
| macOS | ❌ | ✅ | Experimentell* |
| Linux | ❌ | ✅ | Experimentell* |
* Pfade müssen angepasst werden (Unix-Style: /home/user/audio statt h:\audio)
| Version | Parallel-Modus | FFmpeg Batch | Status |
|---|---|---|---|
| 5.1 | Job-basiert | ✅ | Unterstützt |
| 7.0+ | ForEach-Parallel | ✅ | Empfohlen |
| Version | map_channel | Batch (pan) | Performance |
|---|---|---|---|
| 6.x | ✅ | ❌ | Normal |
| 7.0+ | ✅ | ✅ | 3x schneller |
Fehler:
ffmpeg : Die Benennung "ffmpeg" wurde nicht als Name eines Cmdlet erkannt
Lösung:
- Installiere FFmpeg: ffmpeg.org
- Füge FFmpeg zu PATH hinzu:
# Windows $env:Path += ";C:\ffmpeg\bin"
- Verifiziere:
ffmpeg -version
Fehler:
BasePath wurde in der Config-Datei nicht definiert.
Lösung:
- Stelle sicher dass
split.cfgim gleichen Ordner wieSplit.ps1liegt - Prüfe dass
[Options]Section vorhanden ist - Prüfe dass
BasePath = ...korrekt geschrieben ist
Mögliche Ursachen:
-
Ordner enthält mehrere WAV-Dateien:
- Script verarbeitet nur Ordner mit genau 1 WAV-Datei
- Output:
Ueberspringe: Ordner - 3 WAV-Dateien (bereits gesplittet?)
-
Ordner enthält keine WAV-Dateien:
- Output:
Ueberspringe: Ordner - Keine WAV-Dateien
- Output:
-
BasePath falsch:
- Prüfe ob Pfad existiert
- Prüfe Schreibweise
Symptom:
Starte parallele Verarbeitung (PS5.1) mit max. X gleichzeitigen Jobs...
Hinweis:
- Das ist normal bei PowerShell 5.1
- Script nutzt automatisch Job-basierte Parallelverarbeitung
- Funktioniert vollständig, nur anders implementiert als PS 7+
Für optimale Performance:
- Installiere PowerShell 7+
Checks:
-
FFmpeg Version prüfen:
ffmpeg -version # Sollte 7.0 oder höher sein für beste Performance
-
Parallele Verarbeitung aktiviert?
ParallelProcessing = true -
MaxParallelJobs zu niedrig?
MaxParallelJobs = 8 # Erhöhen auf 50-75% deiner CPU-Kerne
-
VerboseOutput deaktivieren:
VerboseOutput = false
Fehler:
Sample Rate konnte nicht ermittelt werden
Lösung:
- Datei ist möglicherweise korrupt
- Prüfe mit:
ffprobe DATEI.wav - Versuche Datei mit anderem Tool zu öffnen/reparieren
MIT License
Contributions sind willkommen! Bei Fragen oder Problemen gerne Issues erstellen.
- https://github.com/Topslakr/x32Live-CleanUp/tree/master
- FFmpeg: ffmpeg.org
- PowerShell: Microsoft