我的局域网上有三台电脑,
一个正在运行的 ubuntu ,
一个运行 openSuse
和我的服务器运行 Archlinux 。
我只是设法让 ffmpeg 在我的服务器上正常运行。
我想编写一个假装在本地计算机上安装 ffmpeg 的脚本,但实际上只是使用服务器的 ffmpeg 。
示例:
在openSuse pc上的我想打电话:
ffmpeg -i file.avi out.flv
然后按照预期得到正常输出,
但我希望它在archlinux上使用ffmpeg。
关于如何让它发挥作用的任何建议 (最好是在Ruby中)
编辑:我已将此问题扩展到How do I display progress bars from a shell command over ssh
答案 0 :(得分:2)
以下是一些选项,最简单的第一个:
在LAN上设置NFS,远程安装服务器上的所有磁盘,然后使用远程安装的名称运行ssh
命令。用户负担使用奇怪的名字。
设置NFS,但解析ffmpeg选项以识别输入和输出文件,然后使用类似realname
包(或简单的shell脚本)的名称将名称首先转换为绝对路径名,然后转换为远程安装名称。
不要使用NFS,而是解析ffmpeg选项并使用scp
复制输入文件和输出文件。
答案 1 :(得分: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*