Code/new Video Backdrop Generator

From kJams Wiki
Jump to navigation Jump to search

Finally. After WAY too many false starts, and dead ends due to Apple bugs and screw ups, it is finally working. So, presenting, for your viewing pleasure, the kJams video backdrop generator! As with my other scripts lately, you can save as either a script or a service. To use, run, and select either a pic file, a video file, or a folder of pictures. If you select a sigle file, that file becomes your background. If it os a video file, it will play behind your lyrics. If you select a folder, in will play as a slide show behind your lyrics. You can change the playback speed by editing the secondsperframe value. Note: for reasons you can blame Apple for, set this value to 1/2 the desired rate.

To save as service, open automator, drag "Ask for Finder Items" to the stage. Type in "Chose a file or folder of images to display behind Video window:" into the prompt. Set Start at: to "kJams" or wherever else you think might be good, and set Type: to "Files and Folders". Leave "Allow Multiple Selection" unchecked.

Next, drag "Run Applescript" to the stage, and copy the code below into the script, overwriting all the default text. Note: if you prefer to run as a script from the script menu, you will have to edit the on run" handler to a file selection block, and you will not be able to use one script for both single files AND folders.

Save as service and you are done!

(Note: You will need to download Quicktime Player 7 (not QuickTime Player X) if you do not have it installed already.)

If you totally love this, please feel free to paypal the author.

<iimg>https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=manifold_sky%yahoo%2ecom&item_name=kJams%20Video%20Backdrop%20Donation&no_shipping=2&no_note=1&currency_code=USD&lc=US&bn=PP%2dBuyNowBF&charset=UTF%2d8 !paypal.gif</iimg>


on run {input, parameters}
	
	--initialize kJams command variables
	set kPlayModeType_STOPPED to 0
	set kPlayModeType_PLAYING to 1
	set kPlayModeType_PAUSED to 2

	set kScriptCommand_PLAY_PAUSE to 1
	set kScriptCommand_TOGGLE_TRANSPARENT_VIDEO to 24
	set kScriptCommand_IS_TRANSPARENT_VIDEO to 25
	set kScriptCommand_GET_VIDEO_WINDOW_DISPLAY_ID to 26
	
	-- create list of available movie types
	set movieFileTypeList to {"mov", "mp4", "m4v", "mpg", "mpeg", "avi", "dv", "flv", "gif"}
	set pictureFileTypeList to {"jpg", "jpeg", "tiff", "tif", "pict", "png", "psd", "gif", "bmp", "raw"}
	set secondsPerFrame to 10 -- set to half the value for seconds per frame (bad QuickTime)
	-- choose file for backdrop
	set fileName to first item in input
	
	-- determine file type
	tell application "Finder"
		ignoring case
			-- is the input a folder?
			if kind of fileName is "folder" then
				set isFolder to true
				-- select a folder
				-- make aliases of every picture file and copy to new directory
				-- play image sequence*)
				set slideshowFolder to ((path to music folder) as string) & "kJams:"
				try
					make new folder at slideshowFolder with properties {name:"imageAliases"}
				end try
				set slideshowFolder to (POSIX path of (slideshowFolder & "imageAliases"))
				--delete entire contents of folder (POSIX file slideshowFolder as string)
				do shell script "rm " & slideshowFolder & "/*.*"
				set fileList to every file of folder fileName whose name extension is in pictureFileTypeList
				set fileIndex to 1
				repeat with theFile in fileList
					-- set theFileType to the name extension of theFile (see comment below)
					set theFile to POSIX path of (theFile as string)
					do shell script "ln " & the quoted form of theFile & " " & the quoted form of slideshowFolder & "/image" & fileIndex & "." & "jpg" -- should be -> theFileType (if QT was not broken)
					set fileIndex to fileIndex + 1
					do shell script "ln " & the quoted form of theFile & " " & the quoted form of slideshowFolder & "/image" & fileIndex & "." & "jpg"
					set fileIndex to fileIndex + 1
					-- I do this twice because, again, QT is broken, and this forces it to show every frame.
				end repeat
			else
				set isFolder to false
				if name extension of fileName is in movieFileTypeList then
					set isMovie to true
				else
					set isMovie to false
					if name extension of fileName is not in pictureFileTypeList then error -128
				end if
			end if
		end ignoring
	end tell
	tell application "kJams Pro"
		-- make video window opaque, to cover up Quicktime tomfoolery
		set videoTransparency to docommand kScriptCommand_IS_TRANSPARENT_VIDEO
		if videoTransparency is not equal to 0 then docommand kScriptCommand_TOGGLE_TRANSPARENT_VIDEO
		set displayID to (docommand kScriptCommand_GET_VIDEO_WINDOW_DISPLAY_ID) as integer
		tell application "System Events"
			set visible of process "QuickTime Player 7" to false
		end tell
		-- bring to front
		activate
		tell application "QuickTime Player 7"
			if front document exists then close front document without saving
			
			--save QT state
			set playMovieBeginnigWhenOpened to play movie from beginning when opened
			set play movie from beginning when opened to false
			
			if isFolder then
				-- The following should really be -> open image sequence (slideshowFolder as string) & "/image1." & the name extension of the first item of fileList seconds per frame secondsPerFrame (if Quicktime was not hopelessly broken!)
				-- sometime open Image sequence still foil. Apple's fault. Grrr!
				open image sequence (slideshowFolder as string) & "/image1.jpg" seconds per frame secondsPerFrame
				set kJamsVideoBackground to the name of front document
				
				-- make video loop
				set the looping of document kJamsVideoBackground to true
			else -- if single movie or picture file
				open fileName
				set kJamsVideoBackground to the name of the front document
				
				-- make video loop, and kill sound
				if isMovie then
					set the looping of document kJamsVideoBackground to true
				else
					set the looping of document kJamsVideoBackground to false
				end if
				set the sound volume of document kJamsVideoBackground to 0
			end if
			--show movie full screen
			present document kJamsVideoBackground display displayID
			set the muted of document kJamsVideoBackground to true
			set play movie from beginning when opened to playMovieBeginnigWhenOpened
		end tell
		activate
		docommand kScriptCommand_TOGGLE_TRANSPARENT_VIDEO
		-- play karaoke track (if mode is not currently "playing" then play)
		if (get mode) is not kPlayModeType_PLAYING then docommand kScriptCommand_PLAY_PAUSE
	end tell
	return input
end run

As always, let me know back in the forum if this is useful, and if it makes you feel overwhelmingly generous, I wouldn't turn down a little PayPal contribution to my motivation fund :)