#1 Le 10/07/2012, à 16:00
- Snake046
[script/ruby] Script récupérant les vidéos flash
Salut !
Ça fait un bail que j'ai pas posté, mais là j'ai écrit un script qui pourrait aider certaines personnes.
Il y a longtemps, les vidéos Flash apparaissaient dans le dossier /tmp. Toutefois les dernières versions de Flash ont mit fin a ce comportement et les vidéos sont maintenant innaccessibles.
On peut toujours rester avec les vieilles versions de Flash, mais de plus en plus d'applications coupent la compatibilité, ce qui devient très contraignant.
Bref, je vous fait profiter de ce script (en éspérant aussi que des contributions pourront le rendre meilleur).
C'est du Ruby, ça copiera toutes vos vidéos flash courrament ouvertes vers /tmp, et ça s'utilise simplement:
- Fournissez en option le PID du plugin Flash (option -p ou --pid).
- Option -x: Vous pouvez aussi demander un prefixe pour les fichiers générés (les noms seront prefix#.flv, ou # est un numéro de 0 à n - 1 vidéos). Par défaut le prefixe est "Flash".
- Option -o ou --output: Et vous pouvez aussi spécifier le dossier ou les vidéos tomberont (par défaut /tmp).
#!/usr/bin/ruby
#
# Option Parsing
#
require 'optparse'
options = {}
(OptionParser.new do | option |
option.banner = "Usage: GetFlashVideo.rb [options]"
options[:pid] = 0
options[:output] = "/tmp"
options[:prefix] = "Flash"
option.on("-p", "--pid PID", "Specify the PID of the Flash plugin") do | pid |
options[:pid] = pid
end
option.on("-o", "--output OUTPUT", "Output the generated files in the directory") do | dir |
options[:output] = dir
end
option.on("-x", "--prefix PREFIX", "Prefixes the name of the generated files") do | prefix |
options[:prefix] = prefix
end
end).parse ARGV
flashPid = options[:pid]
if options[:pid] == 0
output = IO.popen 'ps aux | grep -P "(operapluginwrapper|flash)" | grep -P "^[0-9]+\s+[0-9]+" -o | grep -P "[0-9]+$" -o'
stringlist = output.readlines
# There must be 3 processus matching the expression: this script, the grep itself, and the actual Flash plugin.
raise (Exception.new "Unable to deduce the Flash Plugin PID") if stringlist.count < 3
flashPid = stringlist[0].chop
puts "Assuming Flash Plugin PID to be #{flashPid}"
end
#
# Actual Stuff Happening
#
command = "lsof | grep #{flashPid} | grep /tmp/Flash | grep -P \"[0-9]+u\" -o"
puts "Executing command '#{command}'"
output = IO.popen command
stringlist = output.readlines
doneFiles = Array.new
iterator = 0
stringlist.each do | fd |
fdFile = fd[0..-3]
unless doneFiles.include? fdFile
doneFiles << fdFile
puts "Creating file #{options[:output]}/#{options[:prefix]}#{iterator}.flv (from fd #{fdFile})"
system "cat /proc/#{flashPid}/fd/#{fdFile} > #{options[:output]}/#{options[:prefix]}#{iterator}.flv"
iterator += 1
end
end
Voilà, j'espère que des gens en feront usage !
Dernière modification par Snake046 (Le 12/10/2012, à 11:22)
Aucun message n'est caché dans cette signature.
Hors ligne
#2 Le 12/10/2012, à 11:30
- Snake046
Re : [script/ruby] Script récupérant les vidéos flash
Updated !
Je l'ai arrangé un peu en utilisant des regexp: il n'est plus obligatoire de spécifier le PID de Flash normalement (auto-détection avec Opera et tout les navigateurs qui lancent le plugin avec une commande contenant "Flash").
Et j'ai remplacé le cut par une autre regexp (le script ne fonctionnait pas dans certains cas, au moins avec ça c'est sur de toujours trouver ce qu'il cherche).
Aucun message n'est caché dans cette signature.
Hors ligne