该脚本用于处理名为 的图像Image1.png
。Image10.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
)
该脚本的结果是:
out.png
每个图像文件按顺序调整大小并写入文件。out.png
会话结束时文件被删除。- 创建的视频
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