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 ですか? そうであれば、そのメモリを解放します... これをスレッド化するか、他の方法があるでしょうか?

今では、コンソールでメモリ解放エラーが発生し、ウィンドウにもエラーが発生します...

また、limit memory 0 -limit map 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

その他のリソース

関連情報