Change video uploads to enforce certain limits (#13218)
- Dimensions at most 1920x1200 - Frame rate at most 60
This commit is contained in:
		| @ -126,6 +126,9 @@ class MediaAttachment < ApplicationRecord | ||||
|   IMAGE_LIMIT = 10.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 :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_post_process :set_type_and_extension | ||||
|   before_post_process :check_video_dimensions | ||||
|  | ||||
|   before_save :set_meta | ||||
|  | ||||
| @ -295,6 +299,17 @@ class MediaAttachment < ApplicationRecord | ||||
|     self.processing = delay_processing? ? :queued : :complete | ||||
|   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 | ||||
|     meta = populate_meta | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user