about summary refs log tree commit diff
path: root/lib/paperclip/gif_transcoder.rb
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2017-03-04 22:17:10 +0100
committerEugen Rochko <eugen@zeonfederated.com>2017-03-04 23:02:24 +0100
commitcaf5b8e9757679b93b9a34b0c55f43cb47910201 (patch)
tree6d1dde88a9e086190dea20a3d8b7935afe8ae71c /lib/paperclip/gif_transcoder.rb
parent4cbeb9a7eb4d24cfa1fd2ce6e4a2e731c486925d (diff)
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.
Diffstat (limited to 'lib/paperclip/gif_transcoder.rb')
-rw-r--r--lib/paperclip/gif_transcoder.rb21
1 files changed, 21 insertions, 0 deletions
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