我有一个脚本生成一个文本文件,其中的条目如下:
-ss 5.5 -i "/path/vid 1.mp4" -t 3 "/path/vid out1.mp4"
但是当我用附加的字符串调用ffmpeg时它会失败。 如果我引用变量,那么ffmpeg将整个字符串视为单个选项,错误“找不到选项”。 如果我不引用,那么由于某种原因ffmpeg忽略双引号并报告“/ path / vid:没有这样的文件或目录。
即使它正确打印输入为-i“/ path / vid 1.mp4”。
用单引号替换文件名周围的双引号无济于事。 但是当我将字符串传递给zenity然后手动将其复制到终端时,它可以工作:
zenity --entry --entry-text "ffmpeg -nostdin $line2"
所以我尝试将整个命令分配给var然后运行 bash $ var或exec $ 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
答案 0 :(得分:2)
如果您的参数可能包含空格和/或其他特殊字符,那么您可以使用数组来存储它们。
e.g:
params=(-ss 5.5 -i "/path/vid 1.mp4" -t 3 "/path/vid out1.mp4")
mycommand "${params[@]}"
答案 1 :(得分:0)
如果每个执行都有一个包含所需参数的文本文件,则可以使用xargs:
cat my_list_of_params.txt | xargs -l ffmpeg
执行ffmpeg的次数与文件中的行数一样多。 Param -l表示对于文件中的每一行必须执行一次ffmeg