For anyone interested - the quicktime api is a mysterious and magical
thing…
Below is a snippet that will open quicktime, select the middle frame of
a movie, set it as the poster frame and then export it as an image. Yes,
there are probably much easier ways to do this (there’s a copyFrame
function for example), but this works.
The only problem I have is that it opens the quicktime player and makes
it visible (player.visible= false does nothing). It also seems that it
should be possible to achieve the same thing using the
“QTOControl.QTControl” object, but setting the movie URL using that
object doesn’t work - anyone know why (I’m fairly sure I’ve seen it
crash ruby as well)?
======== This doesn’t work =======
require ‘win32ole’
qt = WIN32OLE.new(“QTOControl.QTControl”)
qt = WIN32OLE.new(“QTOControl.QTControl”)
qt.URL = “C:\temp\fire.mov”
puts qt.Movie
========= This does work ========
require ‘win32ole’
qtlib = WIN32OLE.new(“QuickTimePlayerLib.QuickTimePlayerApp”)
#get a player and open a movie
player = qtlib.Players(1)
player.visible = false #this line doesn’t work…
player.OpenURL(‘C:\temp\source.mov’)
#get the controller
control = player.QTControl
#get the movie and stop it - I don’t even want to see it let alone play
it…
movie = control.Movie
movie.stop
#get the quicktime component and add an exporter
qt = control.Quicktime
qt.Exporters.Add()
exporter = qt.Exporters(1)
exporter.TypeName = “bmp”;
#set the poster frame and go there (although you could really just go
there)
mid_frame = movie.Duration/2
movie.PosterTime = mid_frame
movie.ShowPoster
#do the export…
exporter.SetDataSource(movie)
exporter.DestinationFileName = “C:\temp\whatever.bmp”
exporter.BeginExport
#bye bye player
player.close
puts “consider it exported…”