2

我的局域网上有三台计算机,

一台运行ubuntu
一台运行openSuse
,我的服务器运行Archlinux

我只设法让ffmpeg在我的服务器上正常工作。

我想编写一个脚本,假装是本地机器上的ffmpeg安装,但实际上只是使用服务器的ffmpeg

例子:

在我想调用的 openSuse 电脑上:

ffmpeg -i file.avi out.flv

然后得到预期的正常输出,
但我希望它在archlinux上使用ffmpeg。

关于如何让它发挥作用的任何建议。
(最好在 Ruby 中)

编辑:我已将此问题扩展到如何通过 ssh 从 shell 命令显示进度条

4

2 回答 2

2

这里有一些选项,首先是最简单的:

  • 在 LAN 上设置 NFS,远程安装服务器上的所有磁盘,然后ssh使用远程安装的名称运行命令。使用奇怪名称的负担在于用户。

  • 设置 NFS,但解析 ffmpeg 选项以识别输入和输出文件,然后使用realname包(或简单的 shell 脚本)之类的东西首先将名称转换为绝对路径名,然后再转换为远程安装的名称。

  • 不要使用 NFS,而是解析 ffmpeg 选项并用于scp复制输入文件和输出文件。

于 2009-05-16T00:59:25.450 回答
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

然后我可以这样运行,

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*
于 2009-05-16T06:31:20.893 回答