Fix #3400: Smarter thumbnail generation for videos
This commit is contained in:
@@ -38,11 +38,15 @@ class MediaFile::Image < MediaFile
|
||||
# @see https://github.com/jcupitt/libvips/wiki/HOWTO----Image-shrinking
|
||||
# @see http://jcupitt.github.io/libvips/API/current/Using-vipsthumbnail.md.html
|
||||
def preview(width, height)
|
||||
output_file = Tempfile.new(["image-preview", ".jpg"])
|
||||
resized_image = image.thumbnail_image(width, height: height, **THUMBNAIL_OPTIONS)
|
||||
resized_image.jpegsave(output_file.path, **JPEG_OPTIONS)
|
||||
if is_animated?
|
||||
FFmpeg.new(file).smart_video_preview
|
||||
else
|
||||
output_file = Tempfile.new(["image-preview", ".jpg"])
|
||||
resized_image = image.thumbnail_image(width, height: height, **THUMBNAIL_OPTIONS)
|
||||
resized_image.jpegsave(output_file.path, **JPEG_OPTIONS)
|
||||
|
||||
MediaFile::Image.new(output_file)
|
||||
MediaFile::Image.new(output_file)
|
||||
end
|
||||
end
|
||||
|
||||
def crop(width, height)
|
||||
|
||||
@@ -36,6 +36,7 @@ class MediaFile::Ugoira < MediaFile
|
||||
# XXX should take width and height and resize image
|
||||
def convert
|
||||
raise NotImplementedError, "can't convert ugoira to webm: ffmpeg or mkvmerge not installed" unless self.class.videos_enabled?
|
||||
raise RuntimeError, "can't convert ugoira to webm: no ugoira frame data was provided" unless frame_data.present?
|
||||
|
||||
Dir.mktmpdir("ugoira-#{md5}") do |tmpdir|
|
||||
output_file = Tempfile.new(["ugoira-conversion", ".webm"], binmode: true)
|
||||
@@ -87,10 +88,8 @@ class MediaFile::Ugoira < MediaFile
|
||||
end
|
||||
|
||||
def preview_frame
|
||||
tempfile = Tempfile.new("ugoira-preview", binmode: true)
|
||||
zipfile.entries.first.extract(tempfile.path) { true } # 'true' means overwrite the existing tempfile.
|
||||
MediaFile.open(tempfile)
|
||||
FFmpeg.new(convert).smart_video_preview
|
||||
end
|
||||
|
||||
memoize :zipfile, :preview_frame, :dimensions
|
||||
memoize :zipfile, :preview_frame, :dimensions, :convert
|
||||
end
|
||||
|
||||
@@ -32,9 +32,7 @@ class MediaFile::Video < MediaFile
|
||||
end
|
||||
|
||||
def preview_frame
|
||||
vp = Tempfile.new(["video-preview", ".jpg"], binmode: true)
|
||||
video.screenshot(vp.path, seek_time: 0)
|
||||
MediaFile.open(vp.path)
|
||||
FFmpeg.new(file).smart_video_preview
|
||||
end
|
||||
|
||||
memoize :video, :preview_frame, :dimensions, :duration, :has_audio?
|
||||
|
||||
Reference in New Issue
Block a user