在循环复杂的ffmpeg命令时,Bash参数HELL。我怎么逃避它?

时间:2016-03-28 19:08:05

标签: bash shell ffmpeg

我正在尝试使用ffmpeg -filter_complex

为一堆视频创建波形png

单行命令工作正常&为单个视频文件生成预期的波形图形:

ffmpeg -i INPUT.mp4 -filter_complex:a "showwavespic=s=1080x120" -frames:v 1 OUTPUT.png

当我尝试自动化多个文件的过程时

for f in *.mp4
do
 ffmpeg 
  -i "$f"
  -filter_complex:a "showwavespic=s=1080x120" 
  -frames:v 1 
  '"${f%.mp4}.png"'
done

ffmpeg返回错误:

  

无法找到合适的输出格式'“INPUT.png”'

     

'“INPUT.png”':参数无效

我也试过了剥离命令:

for f in *.mp4
do
 ffmpeg -i "$f" -filter_complex 'showwavespic' -frames:v 1 “${f%.mp4}.png”
done

但得到了相同的参数错误。

我猜这个问题是因为bash语法,而我没有正确地转义引用的参数。我尝试了多个版本的命令,但没有成功。如何修复此循环?

1 个答案:

答案 0 :(得分:3)

删除'附近的单引号("${f%.mp4}.png")。

您的第二个命令似乎使用印刷师的引号()而不是简单的双引号("),这就是您想要的。

双引号(")告诉Bash,引号中的内容应被视为被调用命令的一个参数,即使其中有空格。引号不会传递给被调用的命令。 Bash不认为typographer的引用是特殊的,所以它会将它们传递给命令,而你的脚本不会起作用,因为它们实际上并不是文件名的一部分。