< 返回版块

eweca-d 发表于 2021-08-10 02:18

在使用process调用cmd ffmpeg时遇到了大麻烦。

比如如下命令: ffmpeg -i concat:"test_video_0.ts|test_video_1.ts|test_video_2.ts|test_video_3.ts|test_video_4.ts|test_video_5.ts" -acodec copy -vcodec copy -absf aac_adtstoasc test_video.mp4

println!("{:?}")会自动在双引号前面加反斜杠,但是查看其[u8]又没有反斜杠。使用函数:

// cmd是ffmpeg命令字符串
Command::new("cmd")
        .args(&["/C", &cmd])
        .spawn()
        .expect("command failed to start");

时,由于arg其中要求的trait boundAsRef<OsStr>,应该是会转化为OsStr,而貌似win系统下就是会在双引号前加反斜杠。按道理我觉得应该反斜杠是不存在的啊?但是,我尝试了下,ffmpeg直接报错,而且报错的信息和加了反斜杠的报错信息完全一致。

WIN系统下ffmpeg的双引号又不能用单引号代替,这个问题给我修无语了都。也搜不到啥有用的解决办法。有大神可以教一下怎么解决么?

评论区

写评论
作者 eweca-d 2021-08-10 11:52

我晕,刚才提了一嘴powershell,我突发奇想把命令的Command::new("cmd")直接改成"powershell"居然真的可以运行。其他代码一字没动。

作者 eweca-d 2021-08-10 11:47

我也觉得是这样啊,查看[u8]的时候是没有反斜杠的,但是就是错误和加了反斜杠一样,把我郁闷到了。或许是process模块自动加的?

你是啥系统呀,我的win10运行不了,会依次打开所有ts视频文件,然后错误是At least one output file must be specified

如果是用直接用powershell则提示更有意义些,是:

test_video_1.ts : 无法将“test_video_1.ts”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包
括路径,请确保路径正确,然后再试一次。
所在位置 行:1 字符: 34
+ ffmpeg -i concat:test_video_0.ts|test_video_1.ts|test_video_2.ts|test ...
+                                  ~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (test_video_1.ts:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

而在powershell中,单引号和双引号是都可以用的。如果rust可以直接用powershell,倒是一个解决办法。

--
👇
Aya0wind: 反斜杠只是你用Debug格式化打印的时候自动加的,字符串本身是没有的。OsStr只是一个解决字符串跨系统unicode编码问题的工具,是用来检测字符串的utf-8合法性以及替换非法unicode字符用的,不会给你字符串里去加斜杠的。
另外我自己拿ffmpeg试了一下,你可以把命令改成这样试试,不要加双引号

ffmpeg -i concat:test_video_0.ts|test_video_1.ts|test_video_2.ts|test_video_3.ts|test_video_4.ts|test_video_5.ts -acodec copy -vcodec copy -absf aac_adtstoasc test_video.mp4
Aya0wind 2021-08-10 10:29

反斜杠只是你用Debug格式化打印的时候自动加的,字符串本身是没有的。OsStr只是一个解决字符串跨系统unicode编码问题的工具,是用来检测字符串的utf-8合法性以及替换非法unicode字符用的,不会给你字符串里去加斜杠的。
另外我自己拿ffmpeg试了一下,你可以把命令改成这样试试,不要加双引号

ffmpeg -i concat:test_video_0.ts|test_video_1.ts|test_video_2.ts|test_video_3.ts|test_video_4.ts|test_video_5.ts -acodec copy -vcodec copy -absf aac_adtstoasc test_video.mp4
1 共 3 条评论, 1 页