Comment puis-je utiliser ffmpeg sur une machine distante via SSH
Question
J'ai trois ordinateurs sur mon réseau local,
une course ubuntu ,
une course openSuse
et mon serveur exécutant Archlinux .
Je n'ai réussi à ffmpeg pour fonctionner correctement sur mon serveur.
Je voudrais écrire un script qui prétend être un ffmpeg installation sur la machine locale, mais il fait juste en utilisant du serveur ffmpeg .
Exemple:
sur le PC openSuse je voudrais appeler:
ffmpeg -i file.avi out.flv
et obtenir la sortie normale comme on pouvait s'y attendre,
mais je veux utiliser le ffmpeg sur le ArchLinux.
des conseils quant à la façon j'obtenir ce travail.
(De préférence en Ruby)
EDIT: J'ai étendu cette question Comment afficher les barres de progression d'une commande shell sur ssh
La solution
Je n'ai pas beaucoup de rubis-fu, mais cela semble fonctionner!
Pré-requis,
sudo yum install rubygems
sudo gem install net-ssh net-sftp highline echoe
Code (avec commentaires),
#!/usr/bin/env ruby
require 'rubygems'
require 'net/ssh'
require 'net/sftp'
require 'highline/import'
file = ARGV[ 0 ] # filename from command line
prod = file + "-new" # product filename (call it <file>-new)
rpath = "/tmp" # remote computer operating directory
rfile = "#{rpath}/#{file}" # remote filename
rprod = "#{rpath}/#{prod}" # remote product
cmd = "mv #{rfile} #{rprod}" # remote command, constructed
host = "-YOUR REMOTE HOST-"
user = "-YOUR REMOTE USERNAME-"
pass = ask("Password: ") { |q| q.echo = false } # password from stdin
Net::SSH.start(host, user, :password => pass) do |ssh|
ssh.sftp.connect do |sftp|
# upload local 'file' to remote 'rfile'
sftp.upload!(file, rfile)
# run remote command 'cmd' to produce 'rprod'
ssh.exec!(cmd)
# download remote 'rprod' to local 'prod'
sftp.download!(rprod, prod)
end
end
Et puis je peux courir cela comme si,
dylan@home ~/tmp/ruby) ls
bar remotefoo.rb*
dylan@home ~/tmp/ruby) ./remotefoo.rb bar
Password:
dylan@home ~/tmp/ruby) ls
bar bar-new remotefoo.rb*
Autres conseils
Voici quelques options, plus facile d'abord:
-
Configurer NFS sur votre réseau local, monter tous les disques déportée sur votre serveur, puis exécutez une commande en utilisant les noms
ssh
montés à distance. Il incombe à l'utilisateur d'utiliser les noms étranges. -
Configurer NFS, mais analyser les options ffmpeg pour identifier les fichiers d'entrée et de sortie, puis utiliser quelque chose comme le paquet
realname
(ou un simple script shell) pour convertir les noms premier à chemin absolu, puis à la télécommande noms montés. -
Ne pas utiliser NFS, mais les options ffmpeg et parse utiliser pour copier les
scp
fichiers d'entrée et sur les fichiers de sortie arrière.