Bereiche
News
Rewind
Tipps & Berichte
Forum
Galerie
Journals
Events
Umfragen
Themenwoche
Kleinanzeigen
Interaktiv
Anmelden
Registrierung
Zu allen empfangenen Nachrichten
Suche...
Zur erweiterten Suche
Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum
>
Entwickler
>
Batch-Verarbeitung in der Shell
Batch-Verarbeitung in der Shell
Agrajag
01.08.04
16:26
Ich möchte ein paar Video-Dateien von MOV bzw AVI nach MKV umwandeln lassen. Für einzelne Dateien lautet der Befehl z.B.:
<br>
<br>mkvmerge -o video.mkv --language 1:ger --language 2:eng video.mov
<br>
<br>Wie stelle ich es an, dass ich ein ganzes Verzeichnis auf einen Schlag konvertieren kann. Das ist doch ein Job, der sich doch prima automatisieren lassen müsste, oder?
<br>
<br>Das Problem ist aber, dass ich noch ein Frischling in der Shell bin. Ich benötige auch nicht die komplette Lösung, mir würde es schon reichen, wie es prinzipiell geht und welche Manpages ich mir mal ansehen sollte (mir fehlt da derzeit einfach der Überblick).
<br>
<br>Die nächste Stufe wäre dann, erstmal mit
<br>
<br>mkvmerge -i video.mov
<br>
<br>mir erstmal die Informationen zur Datei ausgeben zu lassen, was z.B. so aussehen kann:
<br>
<br>File ’/Volumes/Filme/Video.avi’: container: AVI
<br>Track ID 0: video (DX50)
<br>Track ID 1: audio (MP3)
<br>Track ID 2: audio (MP3)
<br>
<br>Da interessieren die Anzahl der Tracks und die Track IDs, da sie bei AVI normalerweise bei 0 beginnen und bei MOV 1. Jenachdem müsste der Befehl zur Konvertierung angepasst werden.
<br>
<br>Wie gesagt, ein Verweis auf die Manpages würde schon reichen (oder ein Tipp für ein Tutorial). Irgendwie bin ich zu doof das passende zu ergoogeln
<br>
Hilfreich?
0
Kommentare
Rantanplan
01.08.04
16:29
for f in *.mkv; do mkvmerge -o $f --language 1:ger --language 2:eng ${f%.mkv}.mov; done
<br>
„Wenn ich nicht hier bin, bin ich auf dem Sonnendeck“
Hilfreich?
0
Rantanplan
01.08.04
16:31
Ups, sorry, habe dein Posting nicht genau genug gelesen
Von mov nach mkv:
<br>
<br>for f in *.mov; do mkvmerge -o ${f%.mov}.mkv --language 1:ger --language 2:eng $f; done
„Wenn ich nicht hier bin, bin ich auf dem Sonnendeck“
Hilfreich?
0
Agrajag
01.08.04
16:49
Hey, Danke Rantanplan für die schnelle Antwort.
<br>
<br>Ich probiere es gerade aus und es klappt -- mit einer klitzekleinen Änderung: ein paar Anführungszeichen, da die Dateinamen auch Leerzeichen haben:
<br>
<br>for f in *.avi; do mkvmerge -o "${f%.avi}.mkv" --language 1:ger --language 2:eng "$f"; done
<br>
<br>An die Shell könnte ich mich wirklich gewöhnen, nur ist der Anfang recht schwer, da sie doch recht eigenwillig/kryptisch ist.
<br>
<br>Kann man da noch einen Mechanismus einbauen, ob etwas fehlgeschlagen ist? Z.B. wenn plötzlich die Platte voll ist oder wenn eine Konvertierung fehlgeschlagen ist, dann wäre es nützlich, wenn ich zumindest gesagt bekäme wieviele Fehler auftauchten. Besser wäre natürlich eine Liste der Dateien, bei denen eine Konvertierung fehlschlug. Es wird viel ausgegeben und da sind fehler schwer auszumachen.
<br>
<br>Ich würd mich nicht wundern, wenn es recht einfach zu machen wäre.
Hilfreich?
0
Agrajag
01.08.04
16:59
Achso: das Ergebnis, ob eine Konvertierung erfolgreich war, oder nicht, benötigt man auch, wenn man die Quelldatei anschliessen löschen/verschieben möchte. Damit hätte man auch automatisch die Dateien, bei denen Fehler auftraten.
<br>
<br>mkvmerge kann scheinbar mit einigen MOV-Dateien nichts anfangen.
<br>
<br>Wo kann ich eigenlich etwas über die Varieblenspielerei nachlesen (das mit den ’f%.avi’ und so)? Ich hab hier drei Uralt-Unix-Bücher rumstehen (1990-96), aber derartiges ist mir noch nicht aufgefallen. Stichwort?
<br>
Hilfreich?
0
Rantanplan
01.08.04
17:04
Jo, klar, kann man alles machen. Es gibt viele Wege zum Ziel
<br>
<br>Als erstes: mit $? bekommt man den Rückgabewert des letzten ausgeführten Programms. 0 ist normalerweise "alles ok". Man könnte also eine Funktion schreiben:
<br>
<br>function convert () {
<br> mkvmerge -o "$2" --language 1:ger --language 2:eng "$1"
<br> if [ $? -ne 0 ]; then
<br> echo Fehler beim Konvertieren von $1
<br> fi
<br>}
<br>
<br>for f in *.avi; do convert "$f" "${f%.avi}.mkv"; done
<br>
<br>
„Wenn ich nicht hier bin, bin ich auf dem Sonnendeck“
Hilfreich?
0
Agrajag
01.08.04
18:26
Hmmm... Bei mir kommt immer "line 6: syntax error near unexpected token `}’" -- das ist die Zeile mit dem "echo Fehler beim Konvertieren von $1".
<br>
<br>Wenn ich das if-Konstrukt entferne funktioniert alles, nur mit eben nicht. Ich kann da beim besten Willen keinen Fehler sehen.
Hilfreich?
0
Rantanplan
01.08.04
21:06
Hm. Bei mir funktioniert es. Sind vom Copy&Paste irgendwelche Murkszeichen zurückgeblieben? Deine Shell ist die bash? Mir fällt jetzt auch nix auf....
„Wenn ich nicht hier bin, bin ich auf dem Sonnendeck“
Hilfreich?
0
Agrajag
01.08.04
21:40
Jepp, irgendwie war da was im Argen -- jetzt funktioniert es.
<br>
<br>Nächstes Problem: Wie zur Hölle erzeuge ich ein Zeilenwechsel in einem String?!?
<br>
<br>wrongFiles=${wrongFiles}$f"\n"
<br>
<br>tut es nicht.
<br>
<br>Irgendwie finde ich auch nichts darüber. In allen drei Büchern gibt es im Index kein ’Zeichenketten’, ’Strings’ oder Sonstiges. Das kann doch nicht sein.
<br>
<br>So sehr mir die Shell ja von ihren Möglichkeiten auch gefällt, aber ihre Programmierbarkeit ist Sch... (sorry, bin leicht gefrustet)
<br>
Hilfreich?
0
Sven Janssen
01.08.04
21:42
da arbeite ich schon Jahren auf der Shell, aber ${f%.avi}.mkv war mir absolut unbekannt. Meinereiner hat das immer mit awk gelöst
Sah natürlich etwas komplizierter aus.
<br>
<br>Dank Dir Rantanplan
<br>
<br>Sven
Hilfreich?
0
Sven Janssen
01.08.04
21:54
auf der Shell ist das nicht \n sonder ^M also STRG+V und dann M drücken.
<br>geht aber nicht, das echo gibt Dir dann nur den letzen Eintrag aus.
<br>Müsstest das wenn mit einem Array lösen.
<br>
<br>Sven
Hilfreich?
0
Agrajag
01.08.04
22:02
Hä? Hab ich das jetzt richtig verstanden? Man kann in der Shell keinen Zeilenwechselzeichen an eine Zeichenkette hängen? Das bräuchte ich aber, damit ich mir (möglichst lesbar) ausgeben, bei welchen Dateien eine Konvertierung fehlschlug.
<br>
Hilfreich?
0
Agrajag
01.08.04
22:03
Ach so: Mich würde auch noch interessieren, was es mit "${f%.avi}.mkv" auf sich hat. Wo kann ich mehr darüber lesen (unter welchem Stichwort)?
<br>
Hilfreich?
0
Sven Janssen
02.08.04
02:08
"${f%.avi}.mkv" gibt aus der Variablen f nur den String ohne .avi zurück und hängt .mkv dran.
<br>
<br>Hilfe dazu unter :
<br>man bash
<br>und http://193.175.22.77/bilders/Netzwerke2002/rbes_bash_skript.html
<br>
<br>Sven
Hilfreich?
0
Kommentieren
Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.