before_save :define_screenshot
def define_screenshot
return if file.queued_for_write.empty?
temp_name = get_temp_name
video_file = file.queued_for_write[:original].path
cmd = 'ffmpeg -i #{video_file} -an -ss 00:00:10 -an -r 1 -vframes 1 -y -f mjpeg #{temp_name} >/dev/null 2>&1'
Rails.logger.info 'Running cmd: #{cmd}'
system cmd
self.thumbnail = File.open(temp_name)
end
def get_temp_name
tempdir = Dir::tmpdir || /tmp
t = Time.now.strftime('%Y%m%d')
path = 'clip#{t}-#{$$}-#{rand(0x100000000).to_s(36)}.jpg'
File.join(tempdir, path)
end