Как использовать ffmpeg на удаленном компьютере через ssh
Вопрос
У меня три компьютера в локальной сети,
один бежит убунту,
один бежит openSuse
и мой сервер работает Архлинукс.
мне удалось получить только ffmpeg для правильной работы на моем сервере.
Я хотел бы написать сценарий, который будет притворяться ffmpeg установка на локальном компьютере, но на самом деле будет просто использовать серверную ffmpeg.
Пример:
на компьютере openSuse я хотел бы позвонить:
ffmpeg -i file.avi out.flv
а затем получите нормальный результат, как и следовало ожидать,
но я хочу, чтобы он использовал ffmpeg в ArchLinux.
любой совет относительно того, как мне заставить это работать.
(желательно на Ruby)
РЕДАКТИРОВАТЬ:Я распространил этот вопрос на Как отобразить индикаторы выполнения из команды оболочки через ssh
Решение
У меня не так много руби-фу, но, похоже, это работает!
Предпосылки,
sudo yum install rubygems
sudo gem install net-ssh net-sftp highline echoe
Код (с комментариями),
#!/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
И тогда я смогу запустить это вот так:
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*
Другие советы
Вот несколько вариантов, самый простой:
Настройте NFS в локальной сети, удаленно смонтируйте все диски на сервере, затем запустите
ssh
команду, используя имена удаленного подключения.Бремя использования странных имен лежит на пользователе.Настройте NFS, но проанализируйте параметры ffmpeg для идентификации входных и выходных файлов, а затем используйте что-то вроде
realname
пакет (или простой сценарий оболочки), чтобы преобразовать имена сначала в абсолютные пути, а затем в имена удаленного подключения.Не используйте NFS, а анализируйте параметры ffmpeg и используйте
scp
чтобы скопировать входные файлы и выходные файлы обратно.