Filnamn för film i QuickTime genom Applescript

Tråden skapades och har fått 15 svar. Det senaste inlägget skrevs .
1

Jag har aldrig tidigare använt applescript men skulle vilja göra ett script som kan koda om flera filmer (som jag tagit med digitalkameran) samtidigt till h264 för att spara plats. Jag hade tänkt att scriptet skulle ta alla öppna filmer i QuickTime och lägga till ".mov" på det befintliga filnamnet. Problemet är att jag inte kan få fram filnamnet för en film. Jag har tagit ett befintligt script från Apple och modifierat det. Så här ser scriptet ut nu:

tell application "QuickTime Player"
	activate
	
	try
		if not (exists document 1) then error "No movies are open."
		
		stop every document
		
		-- loop through all the open movies
		repeat with oneDoc in documents
			
			-- get the name of the movie
			set the movie_file to the "" & (file 1 of oneDoc) & ".mov"
			-- check to see if the opened movie can be exported
			if (can export oneDoc as QuickTime movie) is true then
				-- export the movie as QuickTime movie
				export oneDoc to (file 1 of oneDoc) as QuickTime movie using most recent settings
				-- close the movie
				close oneDoc
			else
				error "This movie cannot be exported as a QuickTime movie."
			end if
			
		end repeat
	on error error_message number error_number
		if the error_number is not -128 then
			beep
			display dialog error_message buttons {"Cancel"} default button 1
		end if
	end try
end tell

Det är raden set the movie_file to the "" & (file 1 of oneDoc) & ".mov" som strular för jag får felmeddelandet "Can't make file 1 of item 1 of every document of application "QuickTime Player" into type string".

Felet ligger nog i konverteringen av (file 1 of oneDoc) till en sträng. Hur ska jag göra för att få det att funka?

Kan du inte göra det i automator? Jag vet inte, men det känns som en sådan syssla som den borde klara av...

Automator har inga funktioner för att exportera filmer i andra format.

ok, my bad

  • Medlem
  • Stockholm
  • 2007-08-04 01:32

Kan det hjälpa att förändra den namngivande delen av koden till "Set the movie_file to name of..." osv. ?

Ursprungligen av OldMac:

Kan det hjälpa att förändra den namngivande delen av koden till "Set the movie_file to name of..." osv. ?

Tyvärr, då säger den "Can't make name of file 1 of... into type reference".

Jag läste på en sida att man skulle kunna köra följande lilla script för att få fram alla filer som en film består av men det funkar inte det heller.

tell application "QuickTime Player"
	files of movie 1
end tell
  • Medlem
  • Stockholm
  • 2007-08-06 01:55

Vad sägs om: set the movie_file to the name of movie 1 & ".mov" Åtminstone verkar exportering ske med den koden.

Alternativt: kan du tänka dig att döpa om filerna stängda istället? (mycket lättare!)

Ursprungligen av OldMac:

Vad sägs om: set the movie_file to the name of movie 1 & ".mov" Åtminstone verkar exportering ske med den koden.

Alternativt: kan du tänka dig att döpa om filerna stängda istället? (mycket lättare!)

Det funkar att exportera när jag ändrar raden till
set the movie_file to the "" & (name of oneDoc) & ".mov"
då hamnar de konverterade filerna i / (roten). Däremot har jag upptäckt ett nytt fel, när den första filmen är klar och den ska gå på nästa får jag NSRecieverEvaluationScriptError: 4.

  • Medlem
  • Stockholm
  • 2007-08-07 16:08

Det lilla jag har läst om den feltypen är att det är ett fel som kan bero på att ett objekt saknas, inte finns där det ska, har fel namn, osv - till mer obestämt systemrelaterade orsaker.

Jag har varken sysslat med film eller är särskilt van vid skripttypen (andras koder tenderar ju att vara svårare att förstå än ens egna) varför jag inte har så mycket att komma med av förslag. Det enda som slår mig är att jag inte ser vilket värde som läggs i oneDoc (ser ingen tilldelning av den variabeln) och om det möjligen kan vara en felkälla då repetitionen utgår från oneDoc?

Någonting är det som inte funkar som det ska här. Ta en titt på detta enkla skriptet:

tell application "QuickTime Player"
	
	-- loop through all the open movies
	repeat with oneDoc in documents
		close oneDoc
	end repeat
	
end tell

Det ska loopa igenom alla öppna filmer och helt enkelt stänga dem en efter en. När jag öppnar 6 filmer samtidigt och kör scriptet så stängs tre av fönstren och sen får jag felmeddelandet "NSRecieverEvaluationScriptError: 4".

AHA!
Nu kom jag på det. När jag har stängt en film ändras listan med öppna filmer så när den försöker hoppa till den fjärde filmen så finns det bara tre filmer kvar i listan och man får ett fult index-out-of-bounds-liknande error.

  • Medlem
  • Mölndal
  • 2007-08-08 09:04

En klassisk bugg, även för oss icke-AppleScript-kodare! Lösningen brukar vara att ta en kopia på "listan" innan man börjar arbeta med den.

Ursprungligen av memark:

En klassisk bugg, även för oss icke-AppleScript-kodare! Lösningen brukar vara att ta en kopia på "listan" innan man börjar arbeta med den.

Annars är det bara att byta ut "oneDoc" mot "document 1" så arbetar man alltid med det första dokumentet i listan.

Nu har jag ett script som fungerar men jag fick hårdkoda var filmerna skulle lägga sig (eftersom jag inte fick fram var originalfilmerna låg). Raden ser ut som följer
set the movie_file to the ":Users:Shared:Movies:" & (name of oneDoc) & ".mov"
men det tog ett tag innan jag hittade att Applescript använder : istället för / i sökvägar.

  • Medlem
  • Mölndal
  • 2007-08-09 09:27

OK. Det funkar väl i det här fallet, men jag tänkte mer generellt. Ibland är det kanske bara vartannat dokument man (baserat på nåt villkor) man vill ta bort ur listan. Då underlättar det att kopiera den först.

1
Bevaka tråden