FFMPEG 不接受设置变量 %~n1

FFMPEG 不接受设置变量 %~n1

该脚本用于处理名为 的图像Image1.pngImage10.png调整图像大小,然后将调整大小后的图像转换为具有相同文件名且扩展名为 的视频mp4

请考虑以下脚本:

FOR %%G IN (Image*.png) DO (


ffmpeg -i %%G -vf scale=4096:-1 -y out.png

Set "FF=%~n1"
ffmpeg -loop 1 -i out.png -c:v libx264 -t 1 -crf 25 -pix_fmt yuv420p -y %FF%.mp4


del out.png
)

该脚本的结果是:

  1. out.png每个图像文件按顺序调整大小并写入文件。
  2. out.png会话结束时文件被删除。
  3. 创建的视频MP4.mp4来自最后一个.png文件Image9.png

为什么变量 %FF% 即 %~n1 没有通过 FFMPEG 传递?

答案1

提取 FOR 命令循环变量中不带扩展名或路径的文件名部分的语法如下:

Set FF=%%~nG

循环内需要两个百分比字符,而不是一个,并且变量是G而不是1(这是脚本第一个参数的符号)。

另一个问题是你需要 启用延迟扩展 在执行时而不是解析时扩展变量。

这是我的测试脚本,它演示了您可以用作模型的以下要点:

%echo off
setlocal EnableDelayedExpansion
FOR %%G IN (*.png) DO (
  rem echo %%G : %%~nG
  Set FF=%%~nG
  echo !FF!
)

答案2

有关的语法问题Set FF=%%~nG已解决。

但第二个问题尚未解决,将重新提交给小组。

脚本%FF%.mp4通过失败,具体内容如下:

ffmpeg -loop 1 -i out.png -c:v libx264 -t 1 -crf 25 -pix_fmt yuv420p -y %FF%.mp4

相关内容