erledigt: problem mit escaping in mkvmerge

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
manes
Beiträge: 958
Registriert: 27.08.2007 11:26:54
Wohnort: Köln
Kontaktdaten:

erledigt: problem mit escaping in mkvmerge

Beitrag von manes » 06.01.2013 23:59:23

hallo forum,

ich habe eine große zahl matroska-container, die alle ordentlich benamt sind, die darin enthaltenen tracks haben aber ein ärgerliches durcheinander. statt jetzt jede einzelne datei mit mkv-merge-gui zu öffnen und zu korrigieren, möchte ich das ein skript erledigen lassen.
die datei z.b. Getting_Good_S01E02_Dogs_In_The_Bag.mkv soll ihren namen behalten behalten, die einzelnen tracks aber den dateinamen ohne unterstriche und ohne ".mkv" bekommen. in der nicht funktionierenden form

Code: Alles auswählen

for i in *; do mkvmerge -o neu/$i -M -d 0 -a 1 -s 2 --track-name 0:`basename $i|tr _ " " *` * ; done
ist nur der teil hinter --track-name interessant,
man mkvmerge sagt

Code: Alles auswählen

--track-name TID:name
wie kann ich also hinter der track-id »name« den dateinamen verwenden und nach meinen vorstellungen umstricken, ohne daß mkvmerge darüber ins stolpern gerät?
bzw kapiere ich nicht, wie einzelne escape-sequenzen ineinander geschachtelt werden können…
bin für jeden tip dankbar!

edit: betreff angepasst

grüße
manes
Zuletzt geändert von manes am 21.01.2013 22:06:32, insgesamt 1-mal geändert.
Sometimes you have a programming problem and it seems like the best solution is to use regular expressions; now you have two problems.
David Mertz

Benutzeravatar
manes
Beiträge: 958
Registriert: 27.08.2007 11:26:54
Wohnort: Köln
Kontaktdaten:

Re: problem mit escaping in mkvmerge

Beitrag von manes » 08.01.2013 22:22:31

Debianmkvtoolnix hat mehr zu bieten als nur mkvmerge. z.b. mkvpropedit, mit dem ich nenn es mal header bearbeitet werden können, ohne die ganze datei neu muxen zu müssen.

Code: Alles auswählen

for i in *.mkv;
do mkvpropedit $i -v \
-e info -s title=$(basename $i|cut -d . -f 1) \
-e track:v1 -s language=eng -s flag-default=1 track=$(basename $i|cut -d . -f 1) \
-e track:a1 -s language=eng -s flag-default=1 \
-e track:s1 -s language=eng -s flag-default=1;
done
damit kann ich auf den drei vorhandenen spuren (video, audio, untertitel) schon mal englisch als sprache festlegen und sie zu den defaultspuren machen.
aber

Code: Alles auswählen

title=$(basename $i|cut -d . -f 1)
erhält die unterstriche und ist noch nicht, was ich suche. nach tr pipen

Code: Alles auswählen

title=$(basename $i|cut -d . -f 1|tr _ ' ')
wirft fehlermeldungen. um beim vorherigen beispiel zu bleiben:
Fehler: Es wurde mehr als ein Dateinamen angegeben ('Getting_Good_S01E02_Dogs_In_The_Bag.mkv' und 'Good').
scripting ist irgendwie nicht so meins, da hilft auch alle mühe nichts. hat jemand vielleicht einen tip für mich? i'd appreciate it very much!

grüße
manes
Sometimes you have a programming problem and it seems like the best solution is to use regular expressions; now you have two problems.
David Mertz

Benutzeravatar
manes
Beiträge: 958
Registriert: 27.08.2007 11:26:54
Wohnort: Köln
Kontaktdaten:

Re: problem mit escaping in mkvmerge

Beitrag von manes » 21.01.2013 22:06:08

ich habe mkv-container, mit je einer video-, audio- und untertiteldatei. die container sind ordentlich benamt. die einzelnen dateien sollen den namen des containers erhalten, aber ohne die dateiendung und ohne die unterstriche. außerdem soll jede spur als defaultmäßig abzuspielende markiert werden.

Code: Alles auswählen

#!/bin/bash
for i in *.mkv;
do
NAME=`echo $i|cut -d . -f 1|tr _ ' '`
mkvpropedit $i -v \
-e info -s title="$NAME" \
-e track:v1 -s language=eng -s flag-default=1 -s name="$NAME" \
-e track:a1 -s language=eng -s flag-default=1 -s name="$NAME" \
-e track:s1 -s language=eng -s flag-default=1 -s name="$NAME";
done
grüße
manes
Sometimes you have a programming problem and it seems like the best solution is to use regular expressions; now you have two problems.
David Mertz

Antworten