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個視窗時,我會拋出可用內存等錯誤...我怎麼才能使內存使用得更人性化?那麼那個影像轉換器呢?如果是,則釋放該記憶體......也許有辦法將其線程化或其他東西?

現在我遇到了 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

更多資源

相關內容