我有一个脚本,它生成一个文本文件,其中包含如下条目:
-ss 5.5 -i "/path/vid 1.mp4" -t 3 "/path/vid out1.mp4"
但是当我用这个字符串调用ffmpeg时失败了。
如果我引用变量,那么ffmpeg将整个字符串视为单个选项,错误是“option not found”。
如果我不引用,那么出于某种原因,ffmpeg会忽略双引号并报告“/path/vid:No这样的文件或目录。
即使它将输入正确地打印为-i“/path/vid 1.mp4”。
用单引号替换文件名周围的双引号没有帮助。
但当我将字符串传递给zenity,然后手动将其复制到终端时,它会工作:
zenity --entry --entry-text "ffmpeg -nostdin $line2"
所以我尝试将整个命令分配给一个var,然后运行
抨击$var或执行$var,但没有运气。将其分配给别名也不起作用:“找不到命令”
Joan Estaban的解决方案:
echo $stringvar | xargs ffmpeg
演示问题的简短完整脚本:
#!/bin/bash
fffile="/home/vume5/Desktop/dwhelper/bud grafting animation.mp4"
line="-ss 4.920000 -i \"$fffile\" -t 60.000000 -map 0 -c:v copy -c:a copy \"$fffile.cut.mkv\""
zenity --entry --entry-text "$line"
ffmpeg $line
read dummy
最佳答案
如果参数可能包含空格和/或其他特殊字符,则可以使用数组来存储它们。
例如。:
params=(-ss 5.5 -i "/path/vid 1.mp4" -t 3 "/path/vid out1.mp4")
mycommand "${params[@]}"