Change video uploads to enforce certain limits (#13218)
- Dimensions at most 1920x1200 - Frame rate at most 60
This commit is contained in:
parent
7088633ae1
commit
dc15c81e67
|
@ -126,6 +126,9 @@ class MediaAttachment < ApplicationRecord
|
||||||
IMAGE_LIMIT = 10.megabytes
|
IMAGE_LIMIT = 10.megabytes
|
||||||
VIDEO_LIMIT = 40.megabytes
|
VIDEO_LIMIT = 40.megabytes
|
||||||
|
|
||||||
|
MAX_VIDEO_MATRIX_LIMIT = 2_304_000 # 1920x1200px
|
||||||
|
MAX_VIDEO_FRAME_RATE = 60
|
||||||
|
|
||||||
belongs_to :account, inverse_of: :media_attachments, optional: true
|
belongs_to :account, inverse_of: :media_attachments, optional: true
|
||||||
belongs_to :status, inverse_of: :media_attachments, optional: true
|
belongs_to :status, inverse_of: :media_attachments, optional: true
|
||||||
belongs_to :scheduled_status, inverse_of: :media_attachments, optional: true
|
belongs_to :scheduled_status, inverse_of: :media_attachments, optional: true
|
||||||
|
@ -223,6 +226,7 @@ class MediaAttachment < ApplicationRecord
|
||||||
before_create :set_processing
|
before_create :set_processing
|
||||||
|
|
||||||
before_post_process :set_type_and_extension
|
before_post_process :set_type_and_extension
|
||||||
|
before_post_process :check_video_dimensions
|
||||||
|
|
||||||
before_save :set_meta
|
before_save :set_meta
|
||||||
|
|
||||||
|
@ -295,6 +299,17 @@ class MediaAttachment < ApplicationRecord
|
||||||
self.processing = delay_processing? ? :queued : :complete
|
self.processing = delay_processing? ? :queued : :complete
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def check_video_dimensions
|
||||||
|
return unless (video? || gifv?) && file.queued_for_write[:original].present?
|
||||||
|
|
||||||
|
movie = FFMPEG::Movie.new(file.queued_for_write[:original].path)
|
||||||
|
|
||||||
|
return unless movie.valid?
|
||||||
|
|
||||||
|
raise Mastodon::DimensionsValidationError, "#{movie.width}x#{movie.height} videos are not supported" if movie.width * movie.height > MAX_VIDEO_MATRIX_LIMIT
|
||||||
|
raise Mastodon::DimensionsValidationError, "#{movie.frame_rate.to_i}fps videos are not supported" if movie.frame_rate > MAX_VIDEO_FRAME_RATE
|
||||||
|
end
|
||||||
|
|
||||||
def set_meta
|
def set_meta
|
||||||
meta = populate_meta
|
meta = populate_meta
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue