Baixando e convertendo vídeos do YouTube para AVI e MP3 no Linux usando Ruby, wget, ffmpeg e lame
#!/usr/bin/ruby require "net/http" def inputerror puts "Uso: rytc --<avi|mp3> ID_VIDEO_1 [ID_VIDEO_2 ...]" exit 1 end arg=ARGV if arg.length<2 puts "Você não passou o mínimo que são dois argumentos." inputerror end tipo=arg.shift.gsub(/--/, '').downcase if tipo!='avi' && tipo!='mp3' puts "Você escolheu um formato válido (MP3 ou AVI)." inputerror end ARGV.each do |v| host=Net::HTTP.new("www.youtube.com",80) resposta=host.get("/watch?v="+v) vars=resposta.body.scan(/video_id=.*&t=[^\"&]*/).uniq.to_s url="http://www.youtube.com/get_video?#{vars}" nome=resposta.body.scan(/<title>.*<\/title>/).uniq.to_s.gsub(/<\/?title>/, '').gsub(/YouTube - /, '').gsub(/'/, '\\\'') `wget -c -O '#{nome}.flv' '#{url}'` if tipo=="mp3" `ffmpeg -i '#{nome}.flv' -ar 44100 '#{nome}.wav'` `lame '#{nome}.wav' '#{nome}.mp3'` else `ffmpeg -i '#{nome}.flv' '#{nome}.avi'` end # Descomente a linha abaixo se você não gostar de lixo. # `rm '#{nome}.flv' '#{nome}.wav'` end
Salve como "rytc" em /usr/bin ou alguma outra pasta do $PATH do seu sistema.
O código e o nome extenso do post dispensam explicações. Não se esqueça de baixar Ruby, ffmpeg e lame para o programa funcionar (no Ubuntu, sudo apt-get install ruby lame ffmpeg)
PS: Sou iniciante em Ruby, aceito qualquer contribuição de limpeza de código. Mas a não-orientação-a-objetos foi intencional, porque parecia que ficava muito código inútil sobrando.
PS2: Sim, eu sei que dá pra fazer a mesma coisa em Shell (aliás, não tem muita utilidade usar Ruby aí, porque no fim fico fazendo um monte de chamadas pra programas externos), mas o divertido de aprender uma linguagem nova é fazer essas coisas nela...
Technorati Tags: ruby, programação, shell, utilitários, youtube, vídeo, download, conversão
Compare Preços de: notebooks, acer aspire, hp pavilion, computadores, pentium 4, nintendo wii, ps3, celulares, câmeras digitais


Na proxima, experimente usar o open-uri em vez do net/http ^_^