Tonspur aus Dateien mit einem Befehl auslesen. Geht das?

Sound, Digitalkameras, TV+Video und Spiele.
Antworten
Dengo
Beiträge: 257
Registriert: 07.07.2009 18:54:23

Tonspur aus Dateien mit einem Befehl auslesen. Geht das?

Beitrag von Dengo » 15.06.2024 15:04:18

Hallo Forum,

mir liegen Interviews in .wav vor, die mehrere Spuren beinhalten. Davon brauche ich häufig eine bestimmte Spur zur Weiterverarbeitung.

Fragen:

1. Ist es möglich, per Befehl z.B. die dritte Spur auslesen und als Datei ablegen zu lassen?
2. Könnte die Ausgabe nach Bedarf als .wav oder z.B. als .ogg erfolgen?
3. Es wäre schön, wenn der Befehl auf den Inhalt eines ganzen Verzeichnisses angewandt werden könnte.

Ich verwende zur Bearbeitung Audacity, aber meines Wissens kann man dort nur einzelne Dateien in verschiedenen Schritten entsprechend bearbeiten. Anscheinend kann Audacity mit Befehlen nichts anfangen.

Danke schön im Voraus!

Viele Grüße
Dengo

MaGe
Beiträge: 1798
Registriert: 01.06.2014 17:12:16

Re: Tonspur aus Dateien mit einem Befehl auslesen. Geht das?

Beitrag von MaGe » 15.06.2024 16:34:13

Dengo hat geschrieben: Davon brauche ich häufig eine bestimmte Spur zur Weiterverarbeitung.

Keine Ahnung habe aber diese Seite
https://sendegate.de/t/workflow-fuer-ar ... eien/13427

[...]
Das sollte mit SoX 5 gehen:
sox input.wav output.wav remix 3 4 5 6
erzeugt eine Datei mit den Kanälen 3-6 der ursprünglichen Datei. Mit einem Skript solltest du mithilfe von SoX auch relativ leicht herausfinden können, ob ein Channel nur Stille enthält. SoX lässt sich bspw. über HomeBrew installieren.[...]

Vielleicht hilft es dir ja weiter.



gruss MaGe
Wir müssen uns vor der Klimaerwärmung nicht fürchten.
Uns rottet die soziale Kälte viel früher aus.

niemand
Beiträge: 749
Registriert: 22.12.2023 16:35:53
Kontaktdaten:

Re: Tonspur aus Dateien mit einem Befehl auslesen. Geht das?

Beitrag von niemand » 15.06.2024 18:08:09

Dengo hat geschrieben: ↑ zum Beitrag ↑
15.06.2024 15:04:18
1. Ist es möglich, per Befehl z.B. die dritte Spur auslesen und als Datei ablegen zu lassen?
2. Könnte die Ausgabe nach Bedarf als .wav oder z.B. als .ogg erfolgen?
Geht mit Debianffmpeg recht problemlos. Manpage ist groß, aber Beispiele für alle möglichen Szenarien sind mittels Suchmaschinen schnell zu finden.
Dengo hat geschrieben: ↑ zum Beitrag ↑
15.06.2024 15:04:18
3. Es wäre schön, wenn der Befehl auf den Inhalt eines ganzen Verzeichnisses angewandt werden könnte.
Notfalls halt über den klassischen Einzeiler: for I in *; do ffmpeg […]; done
„I fought in the Vim-Emacs-War.“ Quelle

MaGe
Beiträge: 1798
Registriert: 01.06.2014 17:12:16

Re: Tonspur aus Dateien mit einem Befehl auslesen. Geht das?

Beitrag von MaGe » 15.06.2024 18:47:27

Dengo hat geschrieben:
[...] mir liegen Interviews in .wav vor, die mehrere Spuren beinhalten
Ich lese daraus, alle Spuren in einer WAV Datei.
niemand hat geschrieben: Geht mit Debian ffmpeg recht problemlos. Manpage ist groß,

Und das geht mit ffmpeg?
Ich muß gestehen, dass ich die Manpage in all den Jahren noch nicht durch habe.




gruss MaGe
Wir müssen uns vor der Klimaerwärmung nicht fürchten.
Uns rottet die soziale Kälte viel früher aus.

niemand
Beiträge: 749
Registriert: 22.12.2023 16:35:53
Kontaktdaten:

Re: Tonspur aus Dateien mit einem Befehl auslesen. Geht das?

Beitrag von niemand » 15.06.2024 18:56:55

MaGe hat geschrieben: ↑ zum Beitrag ↑
15.06.2024 18:47:27
Ich lese daraus, alle Spuren in einer WAV Datei.
Ich bezog mich hingegen auf:
Dengo hat geschrieben: ↑ zum Beitrag ↑
15.06.2024 15:04:18
Davon brauche ich häufig eine bestimmte Spur zur Weiterverarbeitung.
[…]
1. Ist es möglich, per Befehl z.B. die dritte Spur auslesen und als Datei ablegen zu lassen?
Das geht ausgezeichnet mit Debianffmpeg. Aber auch was du rausgelesen hast, ginge: notfalls würde man die Spuren in einem Zwischenschritt zusammenlegen und dann extrahieren.

Edit: oh, aus irgendeinem Grund bin ich von Video mit mehreren Audiospuren ausgegangen, und hab auch deinen Hinweis missverstanden. :oops:
Sollte trotzdem mit ffmpeg gehen – kann’s mangels entsprechender Datei leider nicht testen – aber sox ist da in der Tat das geeignetere Werkzeug. Sorry
„I fought in the Vim-Emacs-War.“ Quelle

Dengo
Beiträge: 257
Registriert: 07.07.2009 18:54:23

Re: Tonspur aus Dateien mit einem Befehl auslesen. Geht das?

Beitrag von Dengo » 16.06.2024 03:16:00

Eure Lösungen werden gerade getestet:

1. Ist es möglich, per Befehl z.B. die dritte Spur auslesen und als Datei ablegen zu lassen?
Ja, mit sox klappt es gut, auch wenn ich mich noch nicht über die Bedeutung der Warnung schlau gemacht habe:

Code: Alles auswählen

sox eingabe.WAV ausgabe_canal_3.wav remix 3
sox WARN wav: wave header missing extended part of fmt chunk
Weiß jemand, ob die Eiganschaften der ursprünglichen Spur von sox intakt übertragen werden?

Mit sox kann man auch die Auflösung schön reduzieren - mein Wiedergabe Gerät akzeptiert bis 16Bit und 48khz:

Code: Alles auswählen

sox eingabe.WAV -b 16 output.wav rate -s -a 48k dither -s
Ob ich dither -s lieber weg lasse, ist mir auch noch nicht ganz klar. Klar ist, dass ich die Eigenschaften der Spur so wenig wie möglich verändern möchte.

Ich habe versucht mit | beide Befehle in einer Zeile zu bringen, aber die Ausgabe des ersten Befehls wird vom zweiten nicht gefunden - wohl der falsche Ansatz:

Code: Alles auswählen

$ sox eingabe.WAV ausgabe_canal3.wav remix 3 | sox ausgabe_canal3.WAV -b 16 ausgabe_c3_48k_16Bits.wav rate -s -a 48k dither -s
sox FAIL formats: can't open input file `ausgabe_canal3.WAV': No such file or directory
sox WARN wav: wave header missing extended part of fmt chunk
Toll fand ich dieses Skript, das alle Spuren als Einzeldateien auslesen kann:

Code: Alles auswählen

    #!/bin/sh
    chans=`soxi -c "$1"`
    while [ $chans -ge 1 ]; do
       chans0=`printf %02i $chans`   # 2 digits hence up to 99 chans
       out=`echo "$1"|sed "s/\(.*\)\.\(.*\)/\1-$chans0.\2/"`
       sox "$1" "$out" remix $chans
       chans=`expr $chans - 1`
    done
Anwendung erfolgreich getestet - aber wieder eine Warnung:

Code: Alles auswählen

$ ./Tonspuren_auslesen.sh  eingabe.WAV 
soxi WARN wav: wave header missing extended part of fmt chunk
sox WARN wav: wave header missing extended part of fmt chunk
sox WARN wav: wave header missing extended part of fmt chunk
sox WARN wav: wave header missing extended part of fmt chunk
sox WARN wav: wave header missing extended part of fmt chunk
Ob ich die Zeile "for i in...", um ein ganzes Verzeichnis zu bearbeiten, gebastelt bekomme? Das Spielchen mit den Zeichen ist leicht, wenn man es verstanden hat. Vorher ist es ein Rätsel, das man gerne durchschauen würde.

Danke schön
Viele Grüße
dengo
Zuletzt geändert von Dengo am 16.06.2024 13:59:41, insgesamt 1-mal geändert.

MaGe
Beiträge: 1798
Registriert: 01.06.2014 17:12:16

Re: Tonspur aus Dateien mit einem Befehl auslesen. Geht das?

Beitrag von MaGe » 16.06.2024 11:39:17

Dengo hat geschrieben: Weiß jemand, ob die Eiganschaften der ursprünglichen Spur von sox intakt übertragen werden?

Zu deiner Frage
Ich habe immer noch keinen schimmer von der sache, aber
das script (Tonspuren_auslesen.sh) scheint aus 2 kanal 1kanal zu machen.
Vielleicht liege ich falsch, oder versteh das script nicht.


Das Original:
05_Badlands.wav
Channels : 2 <---------------->
Sample Rate : 44100
Precision : 16-bit
Duration : 00:04:02.99 = 10715712 samples = 18224 CDDA sectors
File Size : 42.9M
Bit Rate : 1.41M

Tonspuren_auslesen.sh

Die Kopie:
05_Badlands-01.wav
Channels : 1 <----------------->
Sample Rate : 44100
Precision : 16-bit
Duration : 00:04:02.99 = 10715712 samples = 18224 CDDA sectors
File Size : 21.4M
Bit Rate : 706k



gruss MaGe
Wir müssen uns vor der Klimaerwärmung nicht fürchten.
Uns rottet die soziale Kälte viel früher aus.

Dengo
Beiträge: 257
Registriert: 07.07.2009 18:54:23

Re: Tonspur aus Dateien mit einem Befehl auslesen. Geht das?

Beitrag von Dengo » 16.06.2024 12:32:30

...das script (Tonspuren_auslesen.sh) scheint aus 2 kanal 1kanal zu machen. ...
Habe es gerade wieder getestet. Es stimmt schon, was ich oben geschrieben habe. Zu jeder ausgegebenen Warnung wird auch eine Datei mit einer einzigen Spur ausgegeben, es entstehen also 4 neue Dateien, deren Größe 1/4 der Eingabedatei ist. Mit Audacity konnte ich dann auch vergleichend bestätigen, dass die Spur Nr. 4 tatsächlich leiser als die Spur Nr. 3 ist.

MaGe
Beiträge: 1798
Registriert: 01.06.2014 17:12:16

Re: Tonspur aus Dateien mit einem Befehl auslesen. Geht das?

Beitrag von MaGe » 16.06.2024 15:43:38

Dengo hat geschrieben: Mit Audacity konnte ich dann auch vergleichend bestätigen, dass die Spur Nr. 4 tatsächlich leiser als die Spur Nr. 3 ist
Und du möchtes aus allen deiner Wav-Dateien nur die eine Spur z.B. Nr. 3 richtig.



gruss MaGe
Wir müssen uns vor der Klimaerwärmung nicht fürchten.
Uns rottet die soziale Kälte viel früher aus.

Dengo
Beiträge: 257
Registriert: 07.07.2009 18:54:23

Re: Tonspur aus Dateien mit einem Befehl auslesen. Geht das?

Beitrag von Dengo » 17.06.2024 00:26:49

Hallo MaGe,

ja, das ist die Frage Nr. 1, und das geht gut mit sox, wie schon oben mitgeteilt:

Code: Alles auswählen

sox eingabe.WAV ausgabe_canal_3.wav remix 3
Für die Frage 2 und Frage 3 liegt noch keine Lösung vor.

MaGe
Beiträge: 1798
Registriert: 01.06.2014 17:12:16

Re: Tonspur aus Dateien mit einem Befehl auslesen. Geht das?

Beitrag von MaGe » 17.06.2024 09:53:23

Dengo hat geschrieben: 2. Könnte die Ausgabe nach Bedarf als .wav oder z.B. als .ogg erfolgen?
Ja auch mit sox.
HINWEIS: Führe den befehl nicht an den original WAV-DATEIEN aus,
bin auf diesem Gebiet, blutiger Laie.

Einmal als wav:

Code: Alles auswählen

 for file in *.wav; do sox -SG "$file" "${file%.*}-neu.wav" remix 3; done 
Einmal als ogg:

Code: Alles auswählen

 for file in *.wav; do sox -SG "$file" "${file%.*}.ogg" remix 3; done


gruss MaGe
Wir müssen uns vor der Klimaerwärmung nicht fürchten.
Uns rottet die soziale Kälte viel früher aus.

Dengo
Beiträge: 257
Registriert: 07.07.2009 18:54:23

Re: Tonspur aus Dateien mit einem Befehl auslesen. Geht das?

Beitrag von Dengo » 18.06.2024 01:15:40

Sehr gut, MaGe! Vielen Dank!

Ich habe den ersten Test vorgenommen und es funktioniert anscheinend hervorragend :)

Nun ist es möglich, aus allen Tondateien eines Verzeichnisses immer z.B. die 3 Spur auslesen und als eigenständige Datei ablegen lassen. Da ich die original Bittiefe + Abtastrate reduzieren möchte, z.B. damit ich das Material bei meinem Wiedergabegerät verwenden zu können, dass nur 16Bit und bis 48000khz kann, muss ich bisher jede einzelne Datei individuell mit folgendem Befehl behandeln.

Code: Alles auswählen

sox eingabe.WAV -b 16 output.wav rate -s -a 48k dither -s
Es wäre also viel Arbeit gespart, wenn dieser Befehl ebenfalls in ein "for i in..."- Befehl umformuliert werden könnte.

Eine weitere hilfreiche Variante wäre, beide Befehle:

Code: Alles auswählen

 for file in *.wav; do sox -SG "$file" "${file%.*}-neu.wav" remix 3; done 
 sox eingabe.WAV -b 16 output.wav rate -s -a 48k dither -s
so als Befehl zusammen zu packen, dass beide Aufgaben dann als Einzelbefehl ein ganzes .wav-Verzeichnis abarbeiten könnte, nämlich zuerst die Tonspur 3 auslesen und dann sie von der Qualität entsprechend herunterschrauben und als Datei ablegen.

Ob jemand diese Kunst beherrscht bzw. ob es möglich ist?

Vielen Dank

MaGe
Beiträge: 1798
Registriert: 01.06.2014 17:12:16

Re: Tonspur aus Dateien mit einem Befehl auslesen. Geht das?

Beitrag von MaGe » 18.06.2024 11:19:12

Dengo hat geschrieben: Ob jemand diese Kunst beherrscht bzw. ob es möglich ist?
Ich hoffe doch :mrgreen:

Leider ohne dither, ist das nicht Automatich :?:
for file in *.wav; do sox -SG "$file" -b 16 -r 48000 "${file%.*}-neu.wav" remix 3; done

Und wieder: Die Benutzung erfolgt ausschließlich auf eigene Gefahr des Benutzers. :wink:




gruss MaGe
Wir müssen uns vor der Klimaerwärmung nicht fürchten.
Uns rottet die soziale Kälte viel früher aus.

Antworten