我正在尝试使用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语法,而我没有正确地转义引用的参数。我尝试了多个版本的命令,但没有成功。如何修复此循环?
答案 0 :(得分:3)
删除'
附近的单引号("${f%.mp4}.png"
)。
您的第二个命令似乎使用印刷师的引号(”
)而不是简单的双引号("
),这就是您想要的。
双引号("
)告诉Bash,引号中的内容应被视为被调用命令的一个参数,即使其中有空格。引号不会传递给被调用的命令。 Bash不认为typographer的引用是特殊的,所以它会将它们传递给命令,而你的脚本不会起作用,因为它们实际上并不是文件名的一部分。