DVD erstellen mit Automator

Schandor

Schandor

Aktives Mitglied
Thread Starter
Dabei seit
15.05.2010
Beiträge
1.427
Reaktionspunkte
29
Liebe Automatisierer, könnt ihr mir bitte bei folgender Sache helfen:

Ich möchte mit Automator ein Script erstellen, das folgendes macht:

Zunächst soll man eine Video-Datei auswählen können (das ist kein Problem, das heißt: "Nach Filmen fragen")
Danach soll ein Verzeichnis erstellt werden, und zwar soll der Benutzer nach dem Namen des Verzeichnisses gefragt werden.
Dann soll dieser Parameter an den Befehl "dvdauthor" (von macports) übergeben werden.

Jetzt sollen in nachstehender Reihenfolge diese Befehle abgearbeitet werden:
1) ffmpeg -i Quellfilm.avi -aspect 16:9 -target pal-dvd Ausgabedatei.mpg
2) dvdauthor -o Zu_erstellendes_Verzeichnis -t Ausgabedatei.mpg
3) dvdauthor -o Zu_erstellendes_Verzeichnis -T

Ist sowas mit Automator machbar?
 
Das geht wahrscheinlich mit AppleScript einfacher, z.B. so (ungestestet):

Code:
[FONT="Verdana"][size=2][color=#4C4D4D]-- Film auswählen:[/color]
[b]set[/b] [color=#3F7F00]theFile[/color] [b]to[/b] [color=#0016B0][b]choose file[/b][/color] [color=#0016B0]with prompt[/color] "Wählen Sie die Videodatei aus: "[color=#7F007F]
[/color]
[color=#4C4D4D]-- Ordnername eingeben:[/color]
[b]set[/b] [color=#3F7F00]thePath[/color] [b]to[/b] "Pfad/zum/Ordner/" & [color=#4315B1]text returned[/color] [b]of[/b] ([color=#0016B0][b]display dialog[/b][/color] "Geben Sie den Ordnername ein: " [color=#0016B0]default answer[/color] "") & "/"[color=#7F007F]
[/color]
[color=#4C4D4D]-- Verzeichnis erstellen:[/color]
[color=#0016B0][b]do shell script[/b][/color] "mkdir " & [color=#6C04D4]quoted form[/color] [b]of[/b] [color=#3F7F00]thePath[/color][color=#7F007F]
[/color]
[color=#4C4D4D]-- Terminalbefehle:[/color]
[color=#0016B0][b]do shell script[/b][/color] "ffmpeg -i " & [color=#6C04D4]quoted form[/color] [b]of[/b] [color=#6C04D4]POSIX path[/color] [b]of[/b] [color=#3F7F00]theFile[/color] & " -aspect 16:9 -target pal-dvd Ausgabedatei.mpg; dvdauthor -o " & [color=#6C04D4]quoted form[/color] [b]of[/b] [color=#3F7F00]thePath[/color] & " -t Ausgabedatei.mpg; dvdauthor -o " & [color=#6C04D4]quoted form[/color] [b]of[/b] [color=#3F7F00]thePath[/color] & " -T;"[/size][/FONT]
 
Ich probier das aus, danke! (und melde mich, wenn's geklappt hat!)
 
So, hab das jetzt mal ausprobiert. Es scheint da noch ein Problem zu geben mit der Übergabe des Pfades an die Terminalbefehle.

Aber ich könnte das vereinfachen:

Wenn ich mir es recht überlege, reicht es mir, wenn ich einen Film auf ein Icon (sript? automator?) ziehe, und das script dann vollautomatisch in einem fix auscodierten Ordner die DVD-Dateien anlegt.
Das wäre wahrscheinlich einfacher.
Leider bin ich der Script-Sprache nicht mächtig: Was muss denn statt "choose file" stehen, wenn dem Script die Datei "von außen" übergeben wird?

Liebe Grüße, Schandor
 
So könnte ein Droplet aussehen:

Code:
[FONT="Verdana"][size=2][b]on[/b] [color=#0000FF][b]open[/b][/color] [color=#3F7F00]theFiles[/color][color=#7F007F]
[/color]
	[color=#4C4D4D]--Pfad festlegen:[/color]
	[b]set[/b] [color=#3F7F00]thePath[/color] [b]to[/b] "/Users/Username/Desktop/"[color=#7F007F]
[/color][color=#7F007F]	[/color]
	[b]repeat[/b] [b]with[/b] [color=#3F7F00]theFile[/color] [b]in[/b] [color=#3F7F00]theFiles[/color][color=#7F007F]
[/color][color=#7F007F]	[/color]
		[color=#4C4D4D]--Dateiname bestimmen:[/color]
		[b]tell[/b] [color=#0000FF][i]application[/i][/color] "Finder"
			[b]set[/b] [color=#3F7F00]fileName[/color] [b]to[/b] [color=#0000FF][i]text[/i][/color] 1 [b]thru[/b] (([color=#0016B0][b]offset[/b][/color] [color=#0016B0]of[/color] "." [color=#0016B0]in[/color] ([color=#6C04D4]name[/color] [b]of[/b] [color=#3F7F00]theFile[/color] [b]as[/b] [color=#0000FF][i]string[/i][/color])) - 1) [b]of[/b] ([color=#6C04D4]name[/color] [b]of[/b] [color=#3F7F00]theFile[/color] [b]as[/b] [color=#0000FF][i]string[/i][/color])
		[b]end[/b] [b]tell[/b][color=#7F007F]
[/color][color=#7F007F]		[/color]
		[color=#4C4D4D]-- Terminalbefehle:[/color]
		[color=#0016B0][b]do shell script[/b][/color] "ffmpeg -i " & [color=#6C04D4]quoted form[/color] [b]of[/b] [color=#6C04D4]POSIX path[/color] [b]of[/b] [color=#3F7F00]theFile[/color] & " -aspect 16:9 -target pal-dvd '" & [color=#3F7F00]fileName[/color] & ".mpg'; dvdauthor -o " & [color=#6C04D4]quoted form[/color] [b]of[/b] [color=#3F7F00]thePath[/color] & " -t '" & [color=#3F7F00]fileName[/color] & ".mpg'; dvdauthor -o " & [color=#6C04D4]quoted form[/color] [b]of[/b] [color=#3F7F00]thePath[/color] & " -T;"
	[b]end[/b] [b]repeat[/b]
[b]end[/b] [color=#0000FF][b]open[/b][/color][/size][/FONT]
 
  • Gefällt mir
Reaktionen: Schandor
@Pill,

vielen Dank für die viele Mühe! Das erleichtert mir die Arbeit ungemein!
Ich probier das gleich aus und meld mich dann!
 
Tja, hm.
Ich denke, das Script müsste funktionieren, allerdings bekomme ich da noch einen Fehler:
Da kommt eine graue Box, in der die ganzen Optionen von ffmpeg aufgelistet stehn. Ganz zuletzt (und bevor die dvdauthor-Befehle ausgeführt werden), steht: Permission denied. Das versteh ich nicht, denn ich habe ganz sicher Berechtigung, sowohl auf den Quell- wie auf den Zielordner … :confused:
 
Probiers mal so, dann musst du dein Administrator Kennwort eingeben:

Code:
[FONT="Verdana"][size=2][b]on[/b] [color=#0000FF][b]open[/b][/color] [color=#3F7F00]theFiles[/color]
	
	[color=#4C4D4D]--Pfad festlegen:[/color]
	[b]set[/b] [color=#3F7F00]thePath[/color] [b]to[/b] "/Users/Username/Desktop/"
	
	[b]repeat[/b] [b]with[/b] [color=#3F7F00]theFile[/color] [b]in[/b] [color=#3F7F00]theFiles[/color]
		
		[color=#4C4D4D]--Dateiname bestimmen:[/color]
		[b]tell[/b] [color=#0000FF][i]application[/i][/color] "Finder"
			[b]set[/b] [color=#3F7F00]fileName[/color] [b]to[/b] [color=#0000FF][i]text[/i][/color] 1 [b]thru[/b] (([color=#0016B0][b]offset[/b][/color] [color=#0016B0]of[/color] "." [color=#0016B0]in[/color] ([color=#6C04D4]name[/color] [b]of[/b] [color=#3F7F00]theFile[/color] [b]as[/b] [color=#0000FF][i]string[/i][/color])) - 1) [b]of[/b] ([color=#6C04D4]name[/color] [b]of[/b] [color=#3F7F00]theFile[/color] [b]as[/b] [color=#0000FF][i]string[/i][/color])
		[b]end[/b] [b]tell[/b]
		
		[color=#4C4D4D]-- Terminalbefehle:[/color]
		[color=#0016B0][b]do shell script[/b][/color] "sudo ffmpeg -i " & [color=#6C04D4]quoted form[/color] [b]of[/b] [color=#6C04D4]POSIX path[/color] [b]of[/b] [color=#3F7F00]theFile[/color] & " -aspect 16:9 -target pal-dvd '" & [color=#3F7F00]fileName[/color] & ".mpg'; dvdauthor -o " & [color=#6C04D4]quoted form[/color] [b]of[/b] [color=#3F7F00]thePath[/color] & " -t '" & [color=#3F7F00]fileName[/color] & ".mpg'; dvdauthor -o " & [color=#6C04D4]quoted form[/color] [b]of[/b] [color=#3F7F00]thePath[/color] & " -T;" [b]with[/b] [color=#0016B0]administrator privileges[/color]
	[b]end[/b] [b]repeat[/b]
[b]end[/b] [color=#0000FF][b]open[/b][/color][/size][/FONT]
 
Danke, aber ich glaube nicht, dass es daran liegt, denn dann bekomme ich die Fehlermeldung: no tty present and no askprogram specified usw.

Automator basiert ja auf AppleScript, und da versteht es sich, dass man in AppleScript freilich mehr machen kann als in Automator. Nur mal ne Grundsatzfrage:
Ist es denn überhaupt möglich aus Automator heraus, so etwas zu realisieren, oder MUSS man zu AppleScript greifen?

Beste Grüße,
Schandor

Edit: Da ich schon mehrmals erfolglos mit Automator und/oder AppleScript versucht habe, diverse Wünsche zu realisieren: Mir wäre auch mit einem bash-script gedient, dem ich die Quelldatei übergebe und das dann den Rest alleine macht.
 
Zuletzt bearbeitet:
Du kannst mit dem Automator natürlich auch Shell Skripte ausführen, das sieht dann so in etwa aus:

attachment.php

Bildschirmfoto 2012-06-17 um 12.24.49.png

Das ist aber weitaus weniger flexibel.

Greifst du per ssh auf einen anderen Mac zu? Anders kann ich mir die Fehlermeldung nicht erklären.
 
Hm, das funktioniert leider auch nicht (das Script mit dem Automator). Bei mir sieht das so aus:

http://www.evernote.com/shard/s112/sh/37a7b70d-6ca6-4816-b63e-bfb00947aae6/b51f43957120bda0b41c684d60acefe4

Und nein, ich mach das alles lokal. Das script sieht so aus:
on open theFiles

--Pfad festlegen:
set thePath to "/Temp/dvd/"

repeat with theFile in theFiles

--Dateiname bestimmen:
tell application "Finder"
set fileName to text 1 thru ((offset of "." in (name of theFile as string)) - 1) of (name of theFile as string)
end tell

-- Terminalbefehle:
do shell script "sudo /opt/local/bin/ffmpeg -i " & quoted form of POSIX path of theFile & " -aspect 16:9 -target pal-dvd '" & fileName & ".mpg'; /opt/local/bin/dvdauthor -o " & quoted form of thePath & " -t '" & fileName & ".mpg'; /opt/local/bin/dvdauthor -o " & quoted form of thePath & " -T;"
end repeat
end open

PS: Sorry, bei mir funktioniert das Einfügen nicht so wie bei Dir (Grafik, Code etc.)
 
Funktioniert denn ffmpeg, wenn du den Befehl nur im Terminal eingibst?

Du kannst auch das mal probieren, dann müsste er dir eine Fehlermeldung ausspucken, von der kannst du dann einen Screenshot machen.

Code:
[FONT="Verdana"][size=2][b]on[/b] [color=#0000FF][b]open[/b][/color] [color=#3F7F00]theFiles[/color]
	[b]try[/b]
		[color=#4C4D4D]--Pfad festlegen:[/color]
		[b]set[/b] [color=#3F7F00]thePath[/color] [b]to[/b] "/Temp/dvd/"
		
		[b]repeat[/b] [b]with[/b] [color=#3F7F00]theFile[/color] [b]in[/b] [color=#3F7F00]theFiles[/color]
			
			[color=#4C4D4D]--Dateiname bestimmen:[/color]
			[b]tell[/b] [color=#0000FF][i]application[/i][/color] "Finder"
				[b]set[/b] [color=#3F7F00]fileName[/color] [b]to[/b] [color=#0000FF][i]text[/i][/color] 1 [b]thru[/b] (([color=#0016B0][b]offset[/b][/color] [color=#0016B0]of[/color] "." [color=#0016B0]in[/color] ([color=#6C04D4]name[/color] [b]of[/b] [color=#3F7F00]theFile[/color] [b]as[/b] [color=#0000FF][i]string[/i][/color])) - 1) [b]of[/b] ([color=#6C04D4]name[/color] [b]of[/b] [color=#3F7F00]theFile[/color] [b]as[/b] [color=#0000FF][i]string[/i][/color])
			[b]end[/b] [b]tell[/b]
			
			[color=#4C4D4D]-- Terminalbefehle:[/color]
			[color=#0016B0][b]do shell script[/b][/color] "/opt/local/bin/ffmpeg -i " & [color=#6C04D4]quoted form[/color] [b]of[/b] [color=#6C04D4]POSIX path[/color] [b]of[/b] [color=#3F7F00]theFile[/color] & " -aspect 16:9 -target pal-dvd '" & [color=#3F7F00]fileName[/color] & ".mpg'; /opt/local/bin/dvdauthor -o " & [color=#6C04D4]quoted form[/color] [b]of[/b] [color=#3F7F00]thePath[/color] & " -t '" & [color=#3F7F00]fileName[/color] & ".mpg'; /opt/local/bin/dvdauthor -o " & [color=#6C04D4]quoted form[/color] [b]of[/b] [color=#3F7F00]thePath[/color] & " -T;"
		[b]end[/b] [b]repeat[/b]
	[b]on[/b] [b]error[/b] [color=#3F7F00]theError[/color]
		[color=#0016B0][b]display dialog[/b][/color] ([color=#3F7F00]theError[/color] [b]as[/b] [color=#0000FF][i]string[/i][/color])
	[b]end[/b] [b]try[/b]
[b]end[/b] [color=#0000FF][b]open[/b][/color]
[/size][/FONT]
 
Das Problem ist wahrscheinlich, dass dvdauthor nicht wartet, bis ffmpeg fertig ist. Folgendes Skript wartet immer, bis der jeweilige Prozess fertig ist. Dazu musst allerdings noch die richtigen Namen der Prozesse eintragen, ich weiss nicht, ob die so korrekt sind:

Code:
[FONT="Verdana"][size=2][b]on[/b] [color=#0000FF][b]open[/b][/color] [color=#3F7F00]theFiles[/color]
	[b]try[/b]
		[color=#4C4D4D]--Pfad festlegen:[/color]
		[b]set[/b] [color=#3F7F00]thePath[/color] [b]to[/b] "/Temp/dvd/"
		
		[b]repeat[/b] [b]with[/b] [color=#3F7F00]theFile[/color] [b]in[/b] [color=#3F7F00]theFiles[/color]
			
			[color=#4C4D4D]--Dateiname bestimmen:[/color]
			[b]tell[/b] [color=#0000FF][i]application[/i][/color] "Finder"
				[b]set[/b] [color=#3F7F00]fileName[/color] [b]to[/b] [color=#0000FF][i]text[/i][/color] 1 [b]thru[/b] (([color=#0016B0][b]offset[/b][/color] [color=#0016B0]of[/color] "." [color=#0016B0]in[/color] ([color=#6C04D4]name[/color] [b]of[/b] [color=#3F7F00]theFile[/color] [b]as[/b] [color=#0000FF][i]string[/i][/color])) - 1) [b]of[/b] ([color=#6C04D4]name[/color] [b]of[/b] [color=#3F7F00]theFile[/color] [b]as[/b] [color=#0000FF][i]string[/i][/color])
			[b]end[/b] [b]tell[/b]
			
			[color=#4C4D4D]-- Terminalbefehle:[/color]
			[color=#0016B0][b]do shell script[/b][/color] "/opt/local/bin/ffmpeg -i " & [color=#6C04D4]quoted form[/color] [b]of[/b] [color=#6C04D4]POSIX path[/color] [b]of[/b] [color=#3F7F00]theFile[/color] & " -aspect 16:9 -target pal-dvd '" & [color=#3F7F00]fileName[/color] & ".mpg';"
			
			[color=#4C4D4D]--Warten, bis ffmpeg fertig ist:[/color]
			[b]tell[/b] [color=#0000FF][i]application[/i][/color] "System Events"
				[b]repeat[/b]
					[b]if[/b] ([color=#0000FF][i]process[/i][/color] "ffmpeg") [color=#0000FF][b]exists[/b][/color] [b]then[/b]
						[color=#0016B0][b]delay[/b][/color] 1
					[b]else[/b]
						[b]exit[/b] [b]repeat[/b]
					[b]end[/b] [b]if[/b]
				[b]end[/b] [b]repeat[/b]
			[b]end[/b] [b]tell[/b]
			
			[color=#0016B0][b]do shell script[/b][/color] "/opt/local/bin/dvdauthor -o " & [color=#6C04D4]quoted form[/color] [b]of[/b] [color=#3F7F00]thePath[/color] & " -t '" & [color=#3F7F00]fileName[/color] & ".mpg';"
			
			[color=#4C4D4D]--Warten, bis dvdauthor fertig ist:[/color]
			[b]tell[/b] [color=#0000FF][i]application[/i][/color] "System Events"
				[b]repeat[/b]
					[b]if[/b] ([color=#0000FF][i]process[/i][/color] "dvdauthor") [color=#0000FF][b]exists[/b][/color] [b]then[/b]
						[color=#0016B0][b]delay[/b][/color] 1
					[b]else[/b]
						[b]exit[/b] [b]repeat[/b]
					[b]end[/b] [b]if[/b]
				[b]end[/b] [b]repeat[/b]
			[b]end[/b] [b]tell[/b][color=#7F007F]
[/color][color=#7F007F]			[/color]
			[color=#0016B0][b]do shell script[/b][/color] "/opt/local/bin/dvdauthor -o " & [color=#6C04D4]quoted form[/color] [b]of[/b] [color=#3F7F00]thePath[/color] & " -T;"
		[b]end[/b] [b]repeat[/b]
	[b]on[/b] [b]error[/b] [color=#3F7F00]theError[/color]
		[color=#0016B0][b]display dialog[/b][/color] ([color=#3F7F00]theError[/color] [b]as[/b] [color=#0000FF][i]string[/i][/color])
	[b]end[/b] [b]try[/b]
[b]end[/b] [color=#0000FF][b]open[/b][/color]
[/size][/FONT]
 
Ich fürchte, das wird mir zu kompliziert. Das Programmieren hat mir immer schon Angst bereitet. Ich werde Dein Script noch ein paarmal durchlesen, traue mir ehrlich gesagt aber nicht zu, das zu verstehen.

Ich hab jetzt mit Automator teilweise Erfolg gehabt. Das Problem ist, dass man zu Beginn immer abfragen muss, ob der Zielordner schon existiert. Wenn ja, ist gut, wenn nein, muss er erst noch erstellt werden. Das bekomm ich im Automator aber nicht hin.
Jedenfalls hab ich es einmal geschafft – der Film wurde erstellt. Beim zweiten Mal hat’s dann nicht mehr funktioniert – wohl, weil der Ordner schon existiert.

Bitte vielmals um Entschuldigung, dass mir AppleScript einfach zu kompliziert ist! Und vielen Dank für die viele Hilfe!
 
So. Hab das Script jetzt angepasst und ausprobiert. Er schreibt und schreibt und schreibt – aber kein Ergebnis.

Jetzt habe ich das in ein bash-script getan – und es funzt! Danke nochmals für alle Tips!

Liebe Grüße, Schandor
 
Schön, dass es nun so klappt. Kannst du das Skript noch posten? Dann wissen andere auch wies geht.
 
Hallo,
hier noch meine 2 Cent:
Mit dem Automator kann man Shell Skripte auch durchaus flexibel ausführen lassen...
(Siehe Beispiel-Screenshot)
Mit der Automator Aktion Neuer Ordner erübrigt sich auch das überprüfen, ob der Ordner schon existiert.

Gruß

mu.jpg
 
@Pill

Sorry, selbstverständlich! Und ohne Deine Hilfe hätte ich das nicht hinbekommen, denn von dem $@ wusste ich nichts. Und auch Deine Scripten hab ich jetzt mehrmals durchgelesen und fühl mich dadurch bereichert!

@varuna

Danke für die zwei Scherflein! Ich werde das nachbasteln und an meine Bedürfnisse anpassen, mal sehen, ob ich’s hinbekomm!

Also hier das script (getestet; Video funktioniert wie gewünscht):

mkdir /Temp/dvd
ffmpeg -i $@ -aspect 16:9 -target pal-dvd /Temp/dvd/dvd.mpg
dvdauthor -o /Temp/dvd/ -t /Temp/dvd/dvd.mpg
dvdauthor -o /Temp/dvd/ -T
rm /Temp/dvd/dvd.mpg

Freilich: Wenn man noch den Zielordner angeben könnte, wäre das toll; eine eventuelle Fortschrittsanzeige wäre auch schön, und wenn nur ein Dateiwachstum mit "watch" angezeigt würde …

Liebe Grüße euch allen!
Schandor
 
@varuna

Hab Dein Script jetzt mal nachgebastelt, aber irgendwas mach ich da noch falsch: Kannst Du mir sagen, in welcher Syntax (bzw. wo in der Schleife) der ffmpeg-Befehl zu stehen kommen muss?

lg
Schandor
 
Zurück
Oben Unten