Как я могу использовать ffmpeg на удаленной машине через SSH - PullRequest
2 голосов
/ 16 мая 2009

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

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

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

Я хотел бы написать сценарий, который будет выдавать себя за ffmpeg на локальном компьютере, но на самом деле будет использовать сервер ffmpeg .

Пример:

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

ffmpeg -i file.avi out.flv

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

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

РЕДАКТИРОВАТЬ: Я расширил этот вопрос до Как отобразить индикаторы выполнения из команды оболочки через ssh

Ответы [ 2 ]

2 голосов
/ 16 мая 2009

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

Предпосылки

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*
2 голосов
/ 16 мая 2009

Вот несколько вариантов, проще всего сначала:

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...