如何通过ssh在远程机器上使用ffmpeg

我的局域网上有三台电脑,

一个运行ubuntu
一个运行openSuse
和我的服务器运行Archlinux

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

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

例:

在openSuse电脑上,我想打电话给:

ffmpeg -i file.avi out.flv

然后按照预期得到正常的输出,
但我想要它在archlinux上使用ffmpeg。

任何意见,如何我会得到这个工作。
(最好在Ruby中)

编辑:我已经扩展这个问题, 如何显示进度条通过ssh的shell命令

Solutions Collecting From Web of "如何通过ssh在远程机器上使用ffmpeg"

我没有很多红宝石,但这似乎工作!

先决条件,

 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包(或简单的shell脚本)的名称将名称首先转换为绝对路径名,再转换为远程装入的名称。

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