Imagemagick批量转换内存过载

Imagemagick批量转换内存过载

我必须将大约十亿张图像从 jp2 转换为 jpg......

我创建了这样的.bat

for /d %%d in (*) do (
  for %%f in ("%%~d\*.jp2") do (
    convert -limit memory 0 -limit map 0 "%%~ff" -quality 25 "%%~dpf\jpg\%%~nf.jpg"
  )
)

但是当转换超过约 100 000 个时,窗口会抛出错误,并显示内存释放等...我该如何做才能让内存使用得更人性化?那么 imageconverter 呢?如果是,则释放该内存....也许有办法将其线程化或其他方法?

现在我遇到了 concolse 的 free memory 错误,而且窗口也抛出了错误...

另外,如果我删除限制内存 0 -限制映射 0,我也会遇到同样的问题......

答案1

下面的方法对我来说很有效,所以如果您发现它有助于解决您的特定情况下这些命令的内存问题,我会为您提供答案。

我知道你的例子是使用致/D循环并用它来迭代另一个为了循环,但使用单个为/F循环播放目录命令和适用的开关似乎有助于确保每次迭代转换等都在内存的新实例中。


就地覆盖转换后的文件

@ECHO ON

SET Source=C:\SourceFolder\Images
SET Ext=*.jp2

FOR /F "DELIMS=" %%A IN ('DIR /A-D /S /B "%Source%\%Ext%"') DO convert -limit memory 0 -limit map 0 "%%~A" -quality 25 "%%~A"
GOTO EOF

将转换后的文件输出到输出目录

@ECHO ON

SET Source=C:\SourceFolder\Images
SET Output=C:\Output\jpg
SET Ext=*.jp2

FOR /F "DELIMS=" %%A IN ('DIR /A-D /S /B "%Source%\%Ext%"') DO convert -limit memory 0 -limit map 0 "%%~A" -quality 25 "%Output%\%%~NXA"
GOTO EOF

更多资源

相关内容