Change video bitrate to always fit within size limit (#26970)
This commit is contained in:
		
							parent
							
								
									70cae19b6b
								
							
						
					
					
						commit
						0f3f9b611f
					
				| @ -41,11 +41,14 @@ module Paperclip | ||||
|         @output_options['vframes'] = 1 | ||||
|       when 'mp4' | ||||
|         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['maxrate'] = "#{bitrate + 192}k" | ||||
|           @output_options['bufsize'] = "#{bitrate * 5}k" | ||||
|           @output_options['b:v']     = bitrate | ||||
|           @output_options['maxrate'] = bitrate + 192_000 | ||||
|           @output_options['bufsize'] = bitrate * 5 | ||||
| 
 | ||||
|           if high_vfr?(metadata) | ||||
|             @output_options['vsync'] = 'vfr' | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user