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