2009-05-15 5 views
2

У меня есть три компьютера на моей локальной сети,Как использовать FFmpeg на удаленной машине через SSH

один работает убунту,
один работает OpenSUSE
и мой сервер работает Archlinux.

Мне только удалось получить ffmpeg для правильной работы на моем сервере.

Я хотел бы написать сценарий, который бы притвориться установки FFmpeg на локальной машине, но фактически просто используя FFmpeg сервера.

Пример:

на компьютере OpenSUSE я хотел бы назвать:

ffmpeg -i file.avi out.flv

, а затем получить нормальный выход, как можно было бы ожидать,
, но я хочу его для использования ffmpeg в archlinux.

любые советы относительно того, как я могу заставить это работать.
(желательно в Ruby)

EDIT: Я продлил этот вопрос How do I display progress bars from a shell command over ssh

ответ

2

У меня нет много рубинов, но это похоже на работу!

Предпосылки,

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 

И тогда я могу запустить это как так,

[email protected] ~/tmp/ruby) ls 
bar remotefoo.rb* 
[email protected] ~/tmp/ruby) ./remotefoo.rb bar 
Password: 
[email protected] ~/tmp/ruby) ls 
bar bar-new remotefoo.rb* 
2

Вот несколько вариантов, самый простой первый:

  • Настройка NFS в локальной сети, удаленного вызова смонтировать все дисков на вашем сервере, затем выполните команду ssh, используя удаленные имена. Бремя лежит на пользователе, чтобы использовать странные имена.

  • Настройте NFS, но проанализируйте параметры ffmpeg для идентификации входных и выходных файлов, затем используйте что-то вроде пакета realname (или простого сценария оболочки) для преобразования имен сначала в абсолютные пути, а затем в имена удаленных подключений.

  • Не используйте NFS, но используйте параметры ffmpeg и используйте scp для копирования входных файлов и выходных файлов обратно.

Смежные вопросы