diff options
author | Claire <claire.github-309c@sitedethib.com> | 2022-02-22 18:06:29 +0100 |
---|---|---|
committer | Claire <claire.github-309c@sitedethib.com> | 2022-02-22 18:06:29 +0100 |
commit | 954e052b0727099be97552af577831a8a0f81a88 (patch) | |
tree | 560526b10076fdfa31245fe8bfdd4a58303ae214 /lib | |
parent | e0d94323bc8f6c5d249452e2baf1f103c15546b8 (diff) | |
parent | 166f6e4b500dd84eeffdbf887b2dc21e6d8c0aa6 (diff) |
Merge branch 'main' into glitch-soc/merge-upstream
Conflicts: - `app/models/media_attachment.rb`: Upstream moved hardcoded values around, while in glitch-soc they are configurable. Moved them like upstream, but keeping glitch-soc's ability to configure them through env vars.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/paperclip/transcoder.rb | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/lib/paperclip/transcoder.rb b/lib/paperclip/transcoder.rb index ec1305038..afd9f58ff 100644 --- a/lib/paperclip/transcoder.rb +++ b/lib/paperclip/transcoder.rb @@ -13,6 +13,7 @@ module Paperclip @time = options[:time] || 3 @passthrough_options = options[:passthrough_options] @convert_options = options[:convert_options].dup + @vfr_threshold = options[:vfr_frame_rate_threshold] end def make @@ -41,6 +42,11 @@ module Paperclip when 'mp4' @output_options['acodec'] = 'aac' @output_options['strict'] = 'experimental' + + if high_vfr?(metadata) && !eligible_to_passthrough?(metadata) + @output_options['vsync'] = 'vfr' + @output_options['r'] = @vfr_threshold + end end command_arguments, interpolations = prepare_command(destination) @@ -88,13 +94,21 @@ module Paperclip end def update_options_from_metadata(metadata) - return unless @passthrough_options && @passthrough_options[:video_codecs].include?(metadata.video_codec) && @passthrough_options[:audio_codecs].include?(metadata.audio_codec) && @passthrough_options[:colorspaces].include?(metadata.colorspace) + return unless eligible_to_passthrough?(metadata) @format = @passthrough_options[:options][:format] || @format @time = @passthrough_options[:options][:time] || @time @convert_options = @passthrough_options[:options][:convert_options].dup end + def high_vfr?(metadata) + @vfr_threshold && metadata.r_frame_rate && metadata.r_frame_rate > @vfr_threshold + end + + def eligible_to_passthrough?(metadata) + @passthrough_options && @passthrough_options[:video_codecs].include?(metadata.video_codec) && @passthrough_options[:audio_codecs].include?(metadata.audio_codec) && @passthrough_options[:colorspaces].include?(metadata.colorspace) + end + def update_attachment_type(metadata) @attachment.instance.type = MediaAttachment.types[:gifv] unless metadata.audio_codec end |