0

我有一个通过 mplayer 播放电影的脚本,我正在尝试将 3D 自动转换为 2D。这是脚本中显示的相关 cmd 行

mplayer -fs "${g[$i]}" -ss $f "${d%.*}".* -hardframedrop -nocorrect-pts -identify &>> log.txt  

即使 "${g[$i]}" 具有所需的选项,这也不会呈现为 2D

echo "${g[$i]}"
 -vo gl:stereo=3   

但是如果我修改 cmd 行直接显示该选项,电影显示为 2D

mplayer -fs -vo gl:stereo=3 -ss $f "${d%.*}".* -hardframedrop -nocorrect-pts -identify &>> log.txt  

问题似乎是 mplayer 在通过 ${g[$i]} 传递时将选项解释为文件名,因此来自 log.txt

Playing  -vo gl:stereo=3 .
File not found: ' -vo gl:stereo=3 '
Failed to open  -vo gl:stereo=3 .  

我怎样才能防止这种情况?

4

1 回答 1

2

你正在通过" -vo gl:stereo=3 ",这确实是无效的。您应该"-vo"通过"gl:stereo=3". 换句话说,它应该作为两个单独的参数传递,没有前导和尾随空格。

最简单的解决方法是跳过周围的引号${g[$i]}

mplayer -fs ${g[$i]} -ss $f "${d%.*}".* -hardframedrop -nocorrect-pts -identify &>> log.txt  

更强大的解决方法是将参数单独存储在一个数组中,例如opts=("-vo" "gl:stereo=3")并使用"${opt[@]}",但 Bash 不支持多维数组,因此这可能需要对您的脚本进行一些更深入的更改。

于 2018-12-02T22:31:05.793 回答