我有一个用例,我想在视频中插入两个水印之一-一个用于深色背景,另一个用于浅色背景。假设我要在视频的右上角执行此操作。
如何确定视频右上部分的平均颜色?发布此信息后,如何通过查看平均颜色确定要使用的水印?
我现在有一个解决方案,我要等距地截取屏幕截图,然后测量平均颜色,但是速度太慢了,特别是对于较长的视频。
# Calculate average color
black_distances = []
white_distances = []
movie = FFMPEG::Movie.new(video_file)
(0..movie.duration / 10).each do |second|
# extract a frame
filename = "tmp/watermark/#{SecureRandom.uuid}.jpg"
movie.screenshot filename.to_s,seek_time: second
# analyse frame for color distance
frame = MiniMagick::Image.open(filename)
frame.crop('20%x20%+80%+0')
frame.resize('1x1')
pixel = frame.get_pixels.flatten
distance_from_black = Math.sqrt(((black[0] - pixel[0])**2 + (black[1] - pixel[1])**2 + (black[2] - pixel[2])**2))
distance_from_white = Math.sqrt(((white[0] - pixel[0])**2 + (white[1] - pixel[1])**2 + (white[2] - pixel[2])**2))
black_distances.push distance_from_black
white_distances.push distance_from_white
File.delete(filename) if File.exist?(filename)
end
average_black_distance = black_distances.reduce(:+).to_f / black_distances.size
average_white_distance = white_distances.reduce(:+).to_f / white_distances.size
对于如何使用结果的average_black_distance
和average_white_distance
来确定要使用哪个水印,我也感到困惑。