我正在创建一个bat文件,它将使用FFMPEG将Real Media文件转换为.MP4文件。我正在循环使用当前文件夹并查找扩展名为.rm的文件,在视频文件中添加几张图片,以便在最终产品中创建幻灯片效果。
这里使用此代码可以正常工作,除了它只显示一个静态图像:
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"
运行第二段代码时出现此错误:
找不到包含路径'imgC:\ Data \ RealtoMP \ FFMPEG_JPG \ ffmpegA48V16_AudOnly'且索引在0-4范围内的文件 imgC:\ Data \ RealtoMP \ FFMPEG_JPG \ ffmpegA48V16_AudOnly:没有这样的文件或目录
在我看来,它是以某种方式而不是像它应该得到范围参数,它是注入我正在运行的文件的路径。是什么导致了这个?
编辑:
我通过使用另一个%转义%02
来解决我的问题。结果是%%02
,以便它在脚本中正确运行。
答案 0 :(得分:3)
%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
。