Skip to content

Instantly share code, notes, and snippets.

@barek2k2
Created October 28, 2017 10:38
Show Gist options
  • Save barek2k2/c91460c00f75067d0f3f5fbf205b1cab to your computer and use it in GitHub Desktop.
Save barek2k2/c91460c00f75067d0f3f5fbf205b1cab to your computer and use it in GitHub Desktop.
transcoder
def generate_transcodes
if !self.is_transcoded? && self.attachment.present?
directory = "#{Rails.root}"
FileUtils.rm_r "#{Rails.root}/transcodes/" if File.exists?("#{directory}/transcodes")
Dir.mkdir("#{directory}/transcodes")
original_url = self.attachment.url.sub("https://s3-ap-southeast-1.amazonaws.com/popcorn-vod/", "").split("?").first
original_name = original_url.split("/").last.sub(".mp4", "")
s3 = AWS::S3.new(
:access_key_id => ENV["AWS_KEY"],
:secret_access_key => ENV["AWS_SECRET"],
:region => 'ap-southeast-1'
)
object = s3.buckets['popcorn-vod'].objects[original_url]
url = object.url_for(:get, {:expires => (24*60).minutes.from_now, :secure => true}).to_s
puts "opening file"
tmp_file = open(url) if url.present?
puts "processing file"
`...... 1280x720 ....`
`...... 640x360 .... transcodes/#{original_name}_360.mp4`
`...... 360x240 .... transcodes/#{original_name}_240.mp4`
`...... 284x160 .... transcodes/#{original_name}_160.mp4`
puts "procesing complete!"
puts "uploading file"
original_url = original_url.split("/")
original_url.pop
original_url = original_url.join("/")
upload_to_folder = original_url
Clip::RESOLUTIONS.each do |res|
original_url = "#{upload_to_folder}/#{original_name}_#{res}.mp4"
obj = s3.buckets['popcorn-vod'].objects[original_url]
file_to_be_uploaded = "#{directory}/transcodes/#{original_name}_#{res}.mp4"
obj.write(:file => file_to_be_uploaded)
puts "file with #{res} uploaded!!"
end
smil_file = File.open("#{directory}/transcodes/clip.smil", 'w') {
|file|
smil_file = '<smil><head></head><body><switch>'
smil_file << '<video src="mp4:'+original_name+'.mp4" .......... />'
smil_file << '<video src="mp4:'+original_name+'_720.mp4".........." />'
smil_file << '<video src="mp4:'+original_name+'_360.mp4".........." />'
smil_file << '<video src="mp4:'+original_name+'_240.mp4".........." />'
smil_file << '<video src="mp4:'+original_name+'_160.mp4".........." />'
smil_file << '</switch></body></smil>'
file.write(smil_file)
}
original_url = "#{upload_to_folder}/clip.smil"
obj = s3.buckets['popcorn-vod'].objects[original_url]
file_to_be_uploaded = "#{directory}/transcodes/clip.smil"
obj.write(:file => file_to_be_uploaded)
puts "smil file uploaded!!"
FileUtils.rm_r "#{directory}/transcodes/" if File.exists?("#{directory}/transcodes")
self.update_attribute(:is_transcoded, true)
puts "file removed after upload!!"
else
puts "transcode generated already !"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment