windows - FFMPEG 在引用图像文件时使用了错误的参数

标签 windows image batch-file ffmpeg

我正在创建一个 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"

当我运行第二段代码时出现此错误:

Could find no file with with path 'imgC:\Data\RealtoMP\FFMPEG_JPG\ffmpegA48V16_AudOnly' and index in the range 0-4 imgC:\Data\RealtoMP\FFMPEG_JPG\ffmpegA48V16_AudOnly: No such file or directory

在我看来,它不是像它应该的那样获取范围参数,而是将路径注入(inject)我正在运行的文件。知道是什么原因造成的吗?

编辑:

我通过用另一个 % 转义 %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

关于windows - FFMPEG 在引用图像文件时使用了错误的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18239418/

相关文章:

javascript - 如何在手机上下载图片并上传到我的服务器?

Windows:从 cmd/.bat 文件安装字体

windows - 在 Win32 应用程序中模仿 Acrylic

windows - 从其可执行文件的路径获取服务名称

visual-studio - Visual Studio : How to store an image resource as an Embedded Resource?

css - 隐藏访问过的链接高亮 CSS

batch-file - 在 GPO 中禁用注册表编辑工具时使用 Reg 查询? MS Office 版本查找

windows - 将一个文件替换到多个文件夹/子目录中

windows - 路由来自特定应用程序的流量

c++ - 在这种情况下如何防止代码崩溃