bash脚本:将包含多个参数的字符串和带空格的文件名传递给ffmpeg

时间:2016-09-02 09:12:25

标签: linux bash ffmpeg

我有一个脚本生成一个文本文件,其中的条目如下:

-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

2 个答案:

答案 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