.mov in .mp4 umpacken ...

matzehali

Mitglied
Thread Starter
Registriert
24.11.2004
Beiträge
160
Hallo ihr,

ich würde mir gerne einen Workflow basteln, bei dem ich beliebige Videodateien mit dem Compressor nach h.264 mit AAC-Ton komprimiere, aber nicht in ein mov, sondern in ein mp4.
Da dies nicht direkt geht, der Compressor aber nach Abschluß einer Datei ein Skript ausführen kann, dachte ich, man könnte vielleicht dann die Datei nochmal mit QuickTimePro umpacken.
Das Problem ist, ich weiß nicht, wie ich da heran gehen sollte. Im Automator gibt es die Speichern unter-Dialoge vom QuickTime-Player nicht, und das war bisher mein Vorgehen, wenn ich Skripte erzeugt habe.
Kann mir jemand einen Hinweis geben?

Vielen Dank,

Matzehali
 

chebfarid

Mitglied
Registriert
05.10.2005
Beiträge
894
Ciao Matzehali,

Du könntest die Konvertierung in QuickTime Pro direkt über AppleScript steuern, wenn es mit Automator nicht geht, z.B:
PHP:
set myMovie to "MacintoshHD:Users:farid:Desktop:MOV01047.mov" as alias
tell application "QuickTime Player"
	activate
	open myMovie
	export movie 1 to file "MacintoshHD:Users:farid:Desktop:MOV01047.mp4" as MPEG4 using most recent settings
end tell
Hinter "using most recent settings" verbergen sich die zuletzt mit QT benutzten Einstellungen für die gewünschte Konvertierung, die Du eventuell vorher korrigieren mußt damit es paßt.

Good scripting
Farid
 

matzehali

Mitglied
Thread Starter
Registriert
24.11.2004
Beiträge
160
Ah, super.
Das funktioniert.
Die Frage ist jetzt noch, wie ich vom Compressor den Dateinamen bekomme.
Ich werde mal schauen, wenn es jemand weiß, wäre ich sehr dankbar. :)

Liebe Grüße und vielen Dank,

Matzehali
 

chebfarid

Mitglied
Registriert
05.10.2005
Beiträge
894
Hab leider keinen Compressor...
Im WWW hab ich diesen Tip gefunden:
Compressor post-processing with AppleScript

Compressor is a file conversion utility included with Apple's Final Cut Pro. It's very handy. There's an option in the preset inspector to run an AppleScript upon completion ("Execute action on output"). While that can be incredibly handy, I was unable to find any sample code on how to actually make that work.

After some experimenting I found what I was looking for. As with many things the answer was quite simple; the full name (including path) of the file is sent to the script as an "open" argument, essentially as if it were sent via the Unix command line. Another trick - the script must be saved as an application, not just a script. Here's all you need:

on open (thefiles)
--There should only be one file, but just in case send it through a loop
repeat with thefile in thefiles
DoSomethingWith(thefile)
end repeat
end open

Auf unser Beispiel übertragen hieße das:
PHP:
on open (myMovies)
tell application "QuickTime Player"
activate
repeat with aMovie in myMovies 
    open aMovie 
    export movie 1 to file "ordner:ordner:ordner:filename.mp4" as MPEG4 using most recent settings
end repeat
end tell
end open
Als Anwendung abspeichern und in Dein Compressor-Preset integrieren.

Good scripting
Farid
 

matzehali

Mitglied
Thread Starter
Registriert
24.11.2004
Beiträge
160
Hallöle nochmal,

also das ist jetzt nach vielen Versuchen mit den ganzen Pfad- und Dateinamensgeschichten (hab' ich aber ganz allerselbst hinbekommen) eine funktionierende Version.
Sie übernimmt die Datei, packt sie in einen .mp4-Container und löscht die .mov-Datei wieder.

Code:
on open (film)
	try
		set text item delimiters to ":"
		set filmname to (film as text)
		set text item delimiters to ""
	on error
		set text item delimiters to ""
	end try
	set filmname to filmname as string
	set N to count of characters of filmname
	set filmname to characters 1 thru (N - 4) of filmname
	set filmname to (filmname & ".mp4")
	set filmname to filmname as text
	tell application "QuickTime Player"
		activate
		open film
		export movie 1 to (filmname) as MPEG4 using most recent settings
		quit
	end tell
	tell application "Finder"
		delete film
	end tell
end open

Chebfarid, vielen Dank für Deine Hilfe! :)

Liebe Grüße,

Matzehali
 

chebfarid

Mitglied
Registriert
05.10.2005
Beiträge
894
Gern geschehen!
Und Dein Script sieht doch sehr gut aus, complimenti !

Farid
 

matzehali

Mitglied
Thread Starter
Registriert
24.11.2004
Beiträge
160
Ja, ist ja eigentlich eh wie Pascal an der Uni (zwei Jahre lang gehabt), nur manchmal so wenig abstrakt und so viele Wörter, daß man echt denkt, ist das jetzt wirklich schon Code, oder beschreibt er da gerade, was gemacht werden soll? :)
Was mir heute noch auffällt, auch wenn man es sicher nicht ändern muß, ist ob das try-end try eigentlich gebraucht wird. Da bin ich mir nicht sicher, sollte doch auch ohne funktionieren, oder?

Liebe Grüße,

Matzehali
 

chebfarid

Mitglied
Registriert
05.10.2005
Beiträge
894
Was mir heute noch auffällt, auch wenn man es sicher nicht ändern muß, ist ob das try-end try eigentlich gebraucht wird. Da bin ich mir nicht sicher, sollte doch auch ohne funktionieren, oder?
Funktioniert auch ohne. Der Vorteil der Try/Error-Bloecke ist, dass sie verhindern, dass Dir das Script bei eventuell auftretenden Fehlern "um die Ohren fliegt" und vielen Benutzern unverstaendliche Fehlermeldungen auswirft. Wenn man sich sicher ist, dass der Code korrekt ist und keine unangenehmen Ueberraschungen auftreten koennen, kommt man auch ohne "Try" aus.

Good scripting
Farid
 

matzehali

Mitglied
Thread Starter
Registriert
24.11.2004
Beiträge
160
Jepp, sowas dachte ich mir! :)
Na denne soweit mal, bis zu meinem zweiten Script! :)

Liebe Grüße,

Matzehali
 

swizz

Mitglied
Registriert
15.04.2008
Beiträge
472
Hallo, ich habe mal versucht das obige Script so umzuschreiben, dass er Dateien mit Qiucktime öffnet und sie als MOV-Dateien abspeichert.
Leider erstellt er so nur Referenzdatein die ungefähr 2 MB groß sind. Ich würde aber gerne den kompletten Film als Datei abspeichern. Wie muss ich den Code da ändern?
Müßte es so theoretisch auch klappen, dass man mehrere Filme auf einmal auf das Programm zieht?

on open (film)
try
set text item delimiters to ":"
set filmname to (film as text)
set text item delimiters to ""
on error
set text item delimiters to ""
end try
set filmname to filmname as string
set N to count of characters of filmname
set filmname to characters 1 thru (N - 4) of filmname
set filmname to (filmname & ".mov")
set filmname to filmname as text
tell application "QuickTime Player"
activate
open film
save document 1 in (filmname)
quit
end tell

end open
 
Oben