From caf5b8e9757679b93b9a34b0c55f43cb47910201 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 4 Mar 2017 22:17:10 +0100 Subject: Fix #431 - convert gif to webm during upload. Web UI treats them like it did before. In the API, attachments now can be either image, video or gifv. Gifv is to be treated like images in terms of behaviour, but are videos by file type. --- lib/paperclip/gif_transcoder.rb | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 lib/paperclip/gif_transcoder.rb (limited to 'lib/paperclip/gif_transcoder.rb') diff --git a/lib/paperclip/gif_transcoder.rb b/lib/paperclip/gif_transcoder.rb new file mode 100644 index 000000000..33d2c4a01 --- /dev/null +++ b/lib/paperclip/gif_transcoder.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +module Paperclip + # This transcoder is only to be used for the MediaAttachment model + # to convert animated gifs to webm + class GifTranscoder < Paperclip::Processor + def make + num_frames = identify('-format %n :file', file: file.path).to_i + + return file unless options[:style] == :original && num_frames > 1 + + final_file = Paperclip::Transcoder.make(file, options, attachment) + + attachment.instance.file_file_name = 'media.webm' + attachment.instance.file_content_type = 'video/webm' + attachment.instance.type = MediaAttachment.types[:gifv] + + final_file + end + end +end -- cgit From 03a857f59a773483924a942ac3bda1b290f82a2e Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 6 Mar 2017 00:30:03 +0100 Subject: Use more widely supported MP4 format for gifv's --- app/models/media_attachment.rb | 12 +++++++----- lib/paperclip/gif_transcoder.rb | 4 ++-- 2 files changed, 9 insertions(+), 7 deletions(-) (limited to 'lib/paperclip/gif_transcoder.rb') diff --git a/app/models/media_attachment.rb b/app/models/media_attachment.rb index 5241d9515..1090f1b39 100644 --- a/app/models/media_attachment.rb +++ b/app/models/media_attachment.rb @@ -59,13 +59,15 @@ class MediaAttachment < ApplicationRecord { small: IMAGE_STYLES[:small], original: { - format: 'webm', + format: 'mp4', convert_options: { output: { - 'c:v' => 'libvpx', - 'crf' => 4, - 'b:v' => '1300K', - 'vsync' => 'cfr', + 'movflags' => 'faststart', + 'pix_fmt' => 'yuv420p', + 'vf' => 'scale=\'trunc(iw/2)*2:trunc(ih/2)*2\'', + 'vsync' => 'cfr', + 'b:v' => '1300K', + 'crf' => 4, }, }, }, diff --git a/lib/paperclip/gif_transcoder.rb b/lib/paperclip/gif_transcoder.rb index 33d2c4a01..8337448b2 100644 --- a/lib/paperclip/gif_transcoder.rb +++ b/lib/paperclip/gif_transcoder.rb @@ -11,8 +11,8 @@ module Paperclip final_file = Paperclip::Transcoder.make(file, options, attachment) - attachment.instance.file_file_name = 'media.webm' - attachment.instance.file_content_type = 'video/webm' + attachment.instance.file_file_name = 'media.mp4' + attachment.instance.file_content_type = 'video/mp4' attachment.instance.type = MediaAttachment.types[:gifv] final_file -- cgit