Hallo,
ich beschreibe hier mal mein Ansinnen verkürzt, denke das würde sonst zu unübersichtlich. Ich möchte per Skript aus Matroska-Dateien alle Audiospuren extrahieren lassen, unabhängig davon wieviele Audiospuren es sind und an welche Stelle sie sich befinden (welche ID sie haben). Dazu lasse ich zunächst per
mediainfo "--Inform=Audio;%ID%\n" quelldatei.mkv | grep -v "^$"
die IDs aller Audiotracks der Datei auslesen. Jede ID steht in einer eigenen Zeile und grep löscht die Leerzeile ganz unten. Das könnte aus aussehen:
2 3
Es sollen auch weitere Angaben ausgelesen werden (z. B. die Sprache), aus denen dann der Ausgabename zusammengebastelt wird, das lasse ich jetzt hier aber weg. Der Befehl für die Extrahierung würde bei manueller Eingabe so aussehen (mit mkvextract):
mkvextract quelldatei.mkv tracks 1:German.ac3 2:Englisch.ac3
Ich müsste also die Tracknummern (hier 1: und 2:) durch die vorher ausgelesenen Variablen ersetzen lassen. Dazu habe ich das hier erstellt:
id=$(mediainfo "--Inform=Audio;%ID%\n" quelldatei.mkv | grep -v "^$") for i in "${id[@]}" ; do i_mod=$[i-1] mkvextract quelldatei.mkv tracks $i_mod:German.ac3 done
Die Variable 'i_mod' zieht von der ID 1 ab, da die Zählung bei Mediainfo bei 1 und bei MKVExtract bei o beginnt. Und genau hier liegt das Problem. Es kommt die Fehlermeldung für diese Zeile mit 'i_mod':
3: Syntaxfehler im Ausdruck. (Fehlerverursachendes Zeichen ist »3«).
Wenn ich mit $1 per 'echo' anzeigen lasse kommt
2 3
statt
2 3
Ich denke das ist der Grund wieso die Berechnung nicht geht. Während des For wird aus der Liste mit jeder ID in einer eigenen Zeile eine Liste mit allen Einträgen in einer Zeile mit einem Leerzeichen dazwischen.