Rust 如何处理进程参数?



我对 Rust 进程真的很困惑。我试图称呼这样的东西:

ffmpeg -i path/to/test-video.webm -ab 160k -ac 2 -vn -f mp3 -

这应该从视频中提取声音并将其发送到标准输出。所以我这样做了:

let sound: std::process::Output = Command::new("ffmpeg")
.arg(format!("-i {}", args.input.to_str().unwrap()))
.arg("-ab 160k")
.arg("-ac 2")
.arg("-vn")
.arg("-f mp3")
.arg("-")
.stdout(Stdio::piped())
.stdin(Stdio::inherit())
.stderr(Stdio::inherit())
.output()
.unwrap();

但出于某种原因,这不起作用。它将其打印到 stderr:

Unrecognized option 'i path/to/test-video.webm'.
Error splitting the argument list: Option not found

当我从 args 中删除斜杠时(所以看起来像.arg(format!("i {}", ...)).arg("ab 160k")...,我得到这个:

Output file #0 does not contain any stream

我想我误解了它是如何工作的,但我在其他应用程序上测试了它,它似乎以我现在的方式工作。我错过了什么,Rust 如何处理这些论点?

需要明确的是,我知道 ffmpeg 板条箱,但由于某种原因它们对我不起作用,我什至无法编译它们。

试试这个

let sound: std::process::Output = Command::new("ffmpeg")
.arg("-i")
.arg(args.input.to_str().unwrap())
.arg("-ab")
.arg("160k")
.arg("-ac")
.arg("2")
.arg("-vn")
.arg("-f")
.arg("mp3")
.arg("-")
.stdout(Stdio::piped())
.stdin(Stdio::inherit())
.stderr(Stdio::inherit())
.output()
.unwrap();

最新更新