引用图像文件时,FFMPEG使用错误的参数

我正在创build一个bat文件,它将使用FFMPEG将Real Media文件转换为.MP4​​文件。 我正在循环当前的文件夹,并find带有.rm扩展名的文件,在video文件中添加多张图片,以在最终产品中创build幻灯片效果。

有了这个代码,它可以工作,除了它只显示一个静态图像:

for %%a in ("*.rm") do ffmpeg -f image2 -r 1/5 -i "img00.jpg" -i "%%a" -c:v libx264 -r 30 -preset slow -crf 20 -c:a libvo_aacenc -b:a 48k -b:v 16k "newfiles\%%~na.mp4" 

有了这个代码,它应该显示一系列的照片。 但是它不:

 for %%a in ("*.rm") do ffmpeg -f image2 -r 1/5 -i "img%02d.jpg" -i "%%a" -c:v libx264 -r 30 -preset slow -crf 20 -c:a libvo_aacenc -b:a 48k -b:v 16k "newfiles\%%~na.mp4" 

我运行第二段代码时出现这个错误:

找不到path为'imgC:\ Data \ RealtoMP \ FFMPEG_JPG \ ffmpegA48V16_AudOnly'且索引范围为0-4的文件imgC:\ Data \ RealtoMP \ FFMPEG_JPG \ ffmpegA48V16_AudOnly:没有这样的文件或目录

在我看来,它是不知道如何得到范围参数,它是注入到我正在运行的文件的path。 任何想法是什么造成这个?

编辑:

我用另一个%来转移%02解决我的问题。 结果是%%02因为它在脚本中正确运行。

批处理文件中的%0将展开到批处理文件的路径。

在你的第二个代码示例中,你有一个"img%02d.jpg" – 将会扩展为"img +批处理文件的路径+ 2d.jpg"

当你无法弄清楚一个批处理文件正在做什么(特别是当你有很长的命令行时),我发现echo显命令行而不是(或者直接)调用它是有帮助的。 这使得自己更容易看到问题。 例如:

 for %%a in ("*.rm") do ( echo ffmpeg -f image2 -r 1/5 -i "img%02d.jpg" -i "%%a" -c:v libx264 -preset slow -crf 20 -c:a libvo_aacenc -b:a 48k -b:v 16k "newfiles\%%~na.mp4" ) 

这会打印出命令行而不是直接调用它,而且你会立即看到命令行不在你期望的位置。 调整代码,直到输出看起来正确,然后删​​除echo