我正在尝试使用 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 返回错误:Unable to find a suitable output format for '"INPUT.png"'
'"INPUT.png"': invalid argument
我还尝试了精简命令:
for f in *.mp4
do
ffmpeg -i "$f" -filter_complex 'showwavespic' -frames:v 1 “${f%.mp4}.png”
done
但得到了相同的参数错误。我猜这个问题是因为 bash 语法,我没有正确地转义引用的参数。我尝试了多个版本的命令,但没有成功。如何解决这个 for 循环?
最佳答案
删除 '
周围的单引号 ( "${f%.mp4}.png"
) .
您的第二个命令似乎使用了打印工的引号 ( ”
) 而不是普通的双引号 ( "
),这正是您想要的。
双引号 ( "
) 告诉 Bash 引号内的内容应被视为调用命令的一个参数,即使其中有空格。引号不会传递给被调用的命令。 Bash 不认为打印者的引号是特殊的,因此它将它们传递给命令,并且您的脚本将不起作用,因为它们实际上不是文件名的一部分。
关于循环复杂的 ffmpeg 命令时 Bash 参数 HELL。我该如何逃脱它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36269290/