Change video bitrate to always fit within size limit (#26970)

This commit is contained in:
Eugen Rochko 2023-09-19 12:25:58 +02:00 committed by GitHub
parent 70cae19b6b
commit 0f3f9b611f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -41,11 +41,14 @@ module Paperclip
@output_options['vframes'] = 1 @output_options['vframes'] = 1
when 'mp4' when 'mp4'
unless eligible_to_passthrough?(metadata) unless eligible_to_passthrough?(metadata)
bitrate = (metadata.width * metadata.height * 30 * BITS_PER_PIXEL) / 1_000 size_limit_in_bits = MediaAttachment::VIDEO_LIMIT * 8
desired_bitrate = (metadata.width * metadata.height * 30 * BITS_PER_PIXEL).floor
maximum_bitrate = (size_limit_in_bits / metadata.duration).floor - 192_000 # Leave some space for the audio stream
bitrate = [desired_bitrate, maximum_bitrate].min
@output_options['b:v'] = "#{bitrate}k" @output_options['b:v'] = bitrate
@output_options['maxrate'] = "#{bitrate + 192}k" @output_options['maxrate'] = bitrate + 192_000
@output_options['bufsize'] = "#{bitrate * 5}k" @output_options['bufsize'] = bitrate * 5
if high_vfr?(metadata) if high_vfr?(metadata)
@output_options['vsync'] = 'vfr' @output_options['vsync'] = 'vfr'