重定向 shell 脚本的 ruby 输出

Redirect shell output for ruby script

我有简单的 ruby 脚本 :

 #! /usr/bin/env ruby
 require 'fileutils'

 FileUtils.rm "output.mkv" if File.exists?("outp    ut.mkv")
 pid = Process.spawn("ffmpeg -i wrong_file.mp4 -c:v libx264 -preset veryslow -qp 0 output.mkv", STDOUT => "output.txt", STDERR => "error.txt")

 puts "pid : #{pid}"
 Process.wait(pid)

但是,STDOUT 和 STDERR 输出到 error.txt,为什么?

看起来,ffmpeg 有另一个退出代码?(通常情况下 0 代表 stdout,1 代表 stdin)

注意:我不想使用原生 shell 重定向,例如 '> output.txt 2> error.txt' 因为我想获取 ffmpeg 的 pid处理,而不是 shell 处理并在将来杀死它。

根据 spawn method documentation 你应该这样做:

pid = Process.spawn("ffmpeg -i wrong_file.mp4 -c:v libx264 -preset veryslow -qp 0 output.mkv", :out => "output.txt", :err => "error.txt")

问题已解决 - FFMPEG 将所有输出重定向到 STDERR