Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tree: 954dddcc31
Fetching contributors…

Cannot retrieve contributors at this time

175 lines (153 sloc) 5.776 kb
module QuickTime
# see ext/movie.c for additional methods
class Movie
# Opens a movie at filepath.
def self.open(filepath)
new.load_from_file(filepath)
end
# Returns a new, empty movie.
def self.empty
new.load_empty
end
# Returns the length of this movie in seconds
# using raw_duration and time_scale.
def duration
raw_duration.to_f/time_scale
end
# Returns the bounding width of this movie in number of pixels.
def width
bounds[:right] - bounds[:left]
end
# Returns the bounding height of this movie in number of pixels.
def height
bounds[:bottom] - bounds[:top]
end
# Returns an array of tracks in this movie.
def tracks
(1..track_count).map do |i|
Track.new.load_from_movie(self, i)
end
end
# Returns an array of audio tracks in this movie.
def audio_tracks
tracks.select { |t| t.audio? }
end
# Returns an array of video tracks in this movie.
def video_tracks
tracks.select { |t| t.video? }
end
# Returns an array of text tracks in this movie.
def text_tracks
tracks.select { |t| t.text? }
end
# Returns an Exporter instance for this movie.
def exporter
Exporter.new(self)
end
# Convenience method for exporting the movie. See Exporter::export.
def export(*args, &block)
exporter.export(*args, &block)
end
# Creates a new video track with given width/height on movie and returns it.
def new_video_track(width, height)
track = new_track(width, height)
track.new_video_media
track
end
# Creates a new audio track with given width/height on movie and returns it.
def new_audio_track(width, height)
track = new_track(width, height)
track.new_audio_media
track
end
# Creates a new text track with given width/height on movie and returns it.
def new_text_track(width, height)
track = new_track(width, height)
track.new_text_media
track
end
# Exports a frame of the movie at the given time (in seconds) to the given file.
# The image format is automatically determined from the file extension. If this
# cannot be determined from the extension then you can use export_image_type to
# specify the ostype manually.
def export_image(filepath, seconds)
# TODO support more file types
type = case File.extname(filepath).downcase
when '.pct', '.pict' then 'PICT'
when '.tif', '.tiff' then 'TIFF'
when '.jpg', '.jpeg' then 'JPEG'
when '.png' then 'PNGf'
when '.tga' then 'TPIC'
when '.bmp' then 'BMPf'
when '.psd' then '8BPS'
else raise QuickTime::Error, "Unable to guess ostype from file extension of #{filepath}"
end
export_image_type(filepath, seconds, type)
end
# Reset selection to beginning
def deselect
select(0, 0)
end
# Adds the tracks of given movie into called movie. Position will default to
# beginning of movie. Duration will default to length of given movie.
#
# You can track the progress of this operation by passing a block to this
# method. It will be called regularly during the process and pass the
# percentage complete (0.0 to 1.0) as an argument to the block.
def composite_movie(movie, position = 0, duration = 0, &block)
select(position, duration)
add_into_selection(movie, &block)
deselect
end
# Adds given movie to the end of movie which this method is called on.
#
# You can track the progress of this operation by passing a block to this
# method. It will be called regularly during the process and pass the
# percentage complete (0.0 to 1.0) as an argument to the block.
def append_movie(movie, &block)
select(duration, 0)
insert_into_selection(movie, &block)
deselect
end
# Inserts given movie into called movie. The position defaults to the beginning
# of the movie. If a duration is passed, that amount of the movie will be replaced.
#
# You can track the progress of this operation by passing a block to this
# method. It will be called regularly during the process and pass the
# percentage complete (0.0 to 1.0) as an argument to the block.
def insert_movie(movie, position = 0, duration = 0, &block)
select(position, duration)
insert_into_selection(movie, &block)
deselect
end
# Returns a new movie from the specified portion of called movie.
#
# You can track the progress of this operation by passing a block to this
# method. It will be called regularly during the process and pass the
# percentage complete (0.0 to 1.0) as an argument to the block.
def clone_section(position = 0, duration = 0, &block)
select(position, duration)
movie = clone_selection(&block)
deselect
movie
end
# Deletes the specified section on movie and returns a new movie
# with that content.
#
# You can track the progress of this operation by passing a block to this
# method. It will be called regularly during the process and pass the
# percentage complete (0.0 to 1.0) as an argument to the block.
def clip_section(position = 0, duration = 0, &block)
select(position, duration)
movie = clip_selection(&block)
deselect
movie
end
# Deletes the specified section on movie.
def delete_section(position = 0, duration = 0)
select(position, duration)
delete_selection
deselect
end
end
end
Jump to Line
Something went wrong with that request. Please try again.