Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 10/07/2012, à 17: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 smile !

Dernière modification par Snake046 (Le 12/10/2012, à 12:22)


Aucun message n'est caché dans cette signature.

Hors ligne

#2 Le 12/10/2012, à 12: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