3

Я должен конвертировать около миллиарда изображений из 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 окон, выдается ошибка со свободной памятью и т.д ... Как я могу сделать, чтобы память использовалась больше человечества? Так, что преобразователь изображения? если да, то освободи эту память .... Может быть есть способы нарезать нитки на это или на что-то еще?

Теперь я получаю в свободную ошибку памяти, а также ошибки окна ...

Также, если я удаляю лимит памяти 0 - предельную карту 0, у меня та же проблема ...

1 ответ1

0

Ниже хорошо работает для меня, поэтому, если вы найдете, что это поможет вам решить проблему с памятью для этих команд в вашем конкретном случае, я предоставлю вам ответ.

Я знаю, что ваш пример использует цикл FOR /D и использует его для итерации в другой цикл FOR, но использование одного цикла FOR /F вместе с командой DIR и соответствующими переключателями, кажется, помогает гарантировать, что каждое повторное преобразование и т.д. Находится в новом экземпляр памяти.


Перезаписать преобразованные файлы на месте

@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

Дополнительные ресурсы

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .