【问题标题】:How do I use ffmpeg on a remote machine via ssh如何通过 ssh 在远程机器上使用 ffmpeg
【发布时间】:2010-10-26 15:46:57
【问题描述】:

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

一个运行 ubuntu,
一个正在运行的 openSuse
我的服务器正在运行 Archlinux

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

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

示例:

在我想调用的 openSuse 电脑上:

ffmpeg -i file.avi out.flv

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

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

编辑:我已将此问题扩展到How do I display progress bars from a shell command over ssh

【问题讨论】:

    标签: ruby linux ffmpeg


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      我没有很多 ruby​​-fu,但这似乎有效!

      先决条件,

      sudo yum install rubygems
      sudo gem install net-ssh net-sftp highline echoe
      

      代码(带有 cmets),

      #!/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*
      

      【讨论】:

        猜你喜欢
        • 2011-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多