在使用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的双引号又不能用单引号代替,这个问题给我修无语了都。也搜不到啥有用的解决办法。有大神可以教一下怎么解决么?
1
共 3 条评论, 1 页
评论区
写评论我晕,刚才提了一嘴
powershell
,我突发奇想把命令的Command::new("cmd")
直接改成"powershell"
居然真的可以运行。其他代码一字没动。我也觉得是这样啊,查看
[u8]
的时候是没有反斜杠的,但是就是错误和加了反斜杠一样,把我郁闷到了。或许是process
模块自动加的?你是啥系统呀,我的win10运行不了,会依次打开所有ts视频文件,然后错误是
At least one output file must be specified
。如果是用直接用
powershell
则提示更有意义些,是:而在
powershell
中,单引号和双引号是都可以用的。如果rust可以直接用powershell,倒是一个解决办法。--
👇
Aya0wind: 反斜杠只是你用Debug格式化打印的时候自动加的,字符串本身是没有的。OsStr只是一个解决字符串跨系统unicode编码问题的工具,是用来检测字符串的utf-8合法性以及替换非法unicode字符用的,不会给你字符串里去加斜杠的。
另外我自己拿ffmpeg试了一下,你可以把命令改成这样试试,不要加双引号
反斜杠只是你用Debug格式化打印的时候自动加的,字符串本身是没有的。OsStr只是一个解决字符串跨系统unicode编码问题的工具,是用来检测字符串的utf-8合法性以及替换非法unicode字符用的,不会给你字符串里去加斜杠的。
另外我自己拿ffmpeg试了一下,你可以把命令改成这样试试,不要加双引号