我有简单的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进程并在将来杀死它。
答案 0 :(得分:0)
根据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")
答案 1 :(得分:0)
问题已解决 - FFMPEG将所有输出重定向到STDERR