Länge von wav-Dateien (in ms) per Batch ermitteln (und speichern)
Hallo Allerseits,
im Rahmen eines Forschungsprojekts haben wir ca. 350 wav-Dateien, die alle zwischen ca. 0.5 und 5 s lang sind. Jetzt bräuchten wir für jede Datei die Länge, idealerweise mit einer Genauigkeit von Millisekunden (es muss nicht ms-genau sein, aber die Sekunden-Angabe vom Windows Explorer reicht nicht. Zehntel oder hundertstel Sekunden reichen auch).
Idealerweise hätten wir ein kleines (externes/internes) Tool welches man in einem kleinen wrapper-script auf der Kommandozeile laufen lassen kann. Es würde vollkommen reichen wenn es dann auf der Kommandozeile eine Ausgabe des Wertes mit Dateinamen gibt, sowas wie:
Datei1.wav 3465
Datei2.wav 586
etc.
Das könnten wir dann in eine Textdatei umleiten und in Excel importieren.
Ich bin leider sehr unbedarft im scripten, habe früher mal ein bissl mit DOS Batch Dateien gemacht
Viele Grüsse,
Andre
im Rahmen eines Forschungsprojekts haben wir ca. 350 wav-Dateien, die alle zwischen ca. 0.5 und 5 s lang sind. Jetzt bräuchten wir für jede Datei die Länge, idealerweise mit einer Genauigkeit von Millisekunden (es muss nicht ms-genau sein, aber die Sekunden-Angabe vom Windows Explorer reicht nicht. Zehntel oder hundertstel Sekunden reichen auch).
Idealerweise hätten wir ein kleines (externes/internes) Tool welches man in einem kleinen wrapper-script auf der Kommandozeile laufen lassen kann. Es würde vollkommen reichen wenn es dann auf der Kommandozeile eine Ausgabe des Wertes mit Dateinamen gibt, sowas wie:
Datei1.wav 3465
Datei2.wav 586
etc.
Das könnten wir dann in eine Textdatei umleiten und in Excel importieren.
Ich bin leider sehr unbedarft im scripten, habe früher mal ein bissl mit DOS Batch Dateien gemacht
Viele Grüsse,
Andre
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 593259
Url: https://administrator.de/contentid/593259
Ausgedruckt am: 25.11.2024 um 00:11 Uhr
10 Kommentare
Neuester Kommentar
Hallo,
muss es Batch sein?
Ansonsten würde ich sowas schnell mit Python zusammenbauen: https://stackoverflow.com/questions/7833807/get-wav-file-length-or-durat ...
CSV Export ist dann nur noch ein Klacks.
Grüße
tomolpi
muss es Batch sein?
Ansonsten würde ich sowas schnell mit Python zusammenbauen: https://stackoverflow.com/questions/7833807/get-wav-file-length-or-durat ...
CSV Export ist dann nur noch ein Klacks.
Grüße
tomolpi
Servus.
Schnell mit der Powershell und Bordmitteln direkt in eine CSV exportiert
Kann man natürlich auch als Batch schreiben wenn man unbedingt will
Grüße Uwe
Schnell mit der Powershell und Bordmitteln direkt in eine CSV exportiert
# Ausgabedatei
$csv = 'D:\ausgabe.csv'
# Ordner mit den *.WAV
$ordner = 'D:\Lieder'
# shell object erstellen
$shell = New-Object -Com Shell.Application
# Dateien auslesen und in CSV exportieren
ls $ordner -File -Filter *.wav | select Fullname,@{n='Dauer(ms)';e={[timespan]::FromTicks($shell.NameSpace((split-path $_.Fullname -Parent)).ParseName((Split-Path $_.Fullname -Leaf)).ExtendedProperty('{64440490-4C8B-11D1-8B70-080036B11A03} 3')).TotalMilliseconds}} | export-csv $csv -Delimiter ";" -NoType -Encoding UTF8
# csv öffnen
start $csv
@echo off & setlocal
set "csv=D:\ausgabe.csv"
set "ordner=D:\Lieder"
powershell -EP Bypass -C "$shell = New-Object -Com Shell.Application;ls '%ordner%' -File -Filter *.wav | select Fullname,@{n='Dauer(ms)';e={[timespan]::FromTicks($shell.NameSpace((split-path $_.Fullname -Parent)).ParseName((Split-Path $_.Fullname -Leaf)).ExtendedProperty('{64440490-4C8B-11D1-8B70-080036B11A03} 3')).TotalMilliSeconds}} | export-csv '%csv%' -Delimiter ';' -NoType -Encoding UTF8"
aber die Sekunden-Angabe vom Windows Explorer reicht nicht.
Reichen dir 100ns Intervalle ?Grüße Uwe
Zitat von @andre-xs:
Nur eine (wahrscheinlich blöde Frage): Das funktioniert nur, wenn ich es Zeile für Zeile eingebe.
Nein läuft problemlos als Script (*.ps1) (Variante1), Variante 2 ist Batch.Nur eine (wahrscheinlich blöde Frage): Das funktioniert nur, wenn ich es Zeile für Zeile eingebe.
Ich brauch's nicht oft, ist also vollkommen ok so. Aber ich hatte auch probiert es einfach in eine Textdatei zu kopieren und die dann zu starten (ohne Endung und mit Endung ".bat"), aber dann kommt eine Fehlermeldung:
Das erste ist Powershell keine *.bat oder *.cmd
Hast du wohl die Executionpolicy nicht angepasst ...
https://www.heise.de/tipps-tricks/Windows-Powershell-Skript-ausfuehren-4 ...
Grüße Uwe
https://www.heise.de/tipps-tricks/Windows-Powershell-Skript-ausfuehren-4 ...
Mehr brauch ich nicht
Na dann viel Spaß.Grüße Uwe
Zitat von @andre-xs:
Die Endung ".ps1" kannte ich nicht, damit klappts dann auch (na ja, theoretisch, jetzt kommt dass "running scripts is disabled on this system").
s. Link. oben zur Executionpolicy , den Abschnitt Wie kann ich mein selbstgeschriebenes Skript dennoch über die Konsole ausführen?...Die Endung ".ps1" kannte ich nicht, damit klappts dann auch (na ja, theoretisch, jetzt kommt dass "running scripts is disabled on this system").
Einmalig in einer elevated PS Konsole
Set-ExecutionPolicy RemoteSigned -Force