Files
danbooru/app/logical/media_file/video.rb

38 lines
793 B
Ruby

class MediaFile::Video < MediaFile
def dimensions
[video.width, video.height]
end
def duration
video.duration
end
def preview(max_width, max_height)
preview_frame.preview(max_width, max_height)
end
def crop(max_width, max_height)
preview_frame.crop(max_width, max_height)
end
def has_audio?
video.audio_channels.present?
end
private
def video
raise NotImplementedError, "can't process videos: ffmpeg or mkvmerge not installed" unless self.class.videos_enabled?
FFMPEG::Movie.new(file.path)
end
def preview_frame
vp = Tempfile.new(["video-preview", ".jpg"], binmode: true)
video.screenshot(vp.path, seek_time: 0)
MediaFile.open(vp.path)
end
memoize :video, :preview_frame, :dimensions, :duration, :has_audio?
end