【发布时间】:2017-01-10 08:21:07
【问题描述】:
我有一个脚本,它会生成一个包含以下条目的文本文件:
-ss 5.5 -i "/path/vid 1.mp4" -t 3 "/path/vid out1.mp4"
但是当我调用带有此字符串的 ffmpeg 时,它会失败。 如果我引用变量,则 ffmpeg 将整个字符串视为单个选项,错误“找不到选项”。 如果我不引用,那么由于某种原因,ffmpeg 会忽略双引号并报告 "/path/vid :No such file or directory.
即使它将输入正确打印为 -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
【问题讨论】:
-
手动尝试命令
ffmpeg -ss 5.5 -i "/path/vid 1.mp4" -t 3 "/path/vid out1.mp4"有效吗? -
是的。我认为问题在于双引号被视为文件名字符。这就是它的样子。我不知道如何防止这种情况发生。
-
只是猜测,但这有帮助吗?
-ss 5.5 -i "\"/path/vid 1.mp4\"" -t 3 "\"/path/vid out1.mp4\"" -
不。然后是 ""/path/vid :no such file.. 问题似乎是相反的。引号不会被解释,并被视为文件名字符。
-
你可以试试xargs:
cat my_params.txt | xargs -l ffmpeg