1

我正在创建一个 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它在脚本中正确运行。

4

1 回答 1

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.

于 2013-08-14T19:26:13.727 回答