Lote Imagemagick convertendo sobrecarga de memória

Lote Imagemagick convertendo sobrecarga de memória

Devo converter cerca de bilhões de imagens de jp2 para jpg...

Eu crio esse .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"
  )
)

mas quando a conversão ultrapassa ~ 100.000 janelas, ocorre um erro com memória livre, etc ... Como posso fazer com que a memória seja usada com mais humanidade? Então aquele conversor de imagem? se sim, então libere essa memória... Talvez haja maneiras de encadear isso ou outra coisa?

Agora eu recebo erros de memória livre e também erros de lançamento da janela ...

Além disso, se eu excluir a memória limite 0 -limit map 0, terei o mesmo problema ...

Responder1

Abaixo funciona bem para mim, portanto, caso você ache útil para resolver o problema de memória desses comandos em seu caso específico, estou fornecendo uma resposta.

Eu sei que seu exemplo está usando umPARA /Dloop e usá-lo para iterar em outroPARAloop, mas usando um únicoPARA /Floop junto com oDIRO comando e as opções aplicáveis ​​parecem ajudar a garantir que cada conversão iterada, etc., esteja em uma nova instância de memória.


Substituir arquivos convertidos no local

@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

Saída de arquivos convertidos para um diretório de saída

@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

Recursos adicionais

informação relacionada