2010-12-28 2 views
26

У меня 100-страничный PDF, который составляет около 50 МБ. Я запускаю сценарий ниже, и он занимает около 23 секунд на страницу. PDF - это сканирование бумажного документа.Любые советы по ускорению GhostScript?

gswin32.exe -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dCompatibilityLevel=1.3 
      -dPDFSETTINGS=/screen -sOutputFile=out4.pdf 09.pdf 

Есть ли что-нибудь, что я могу сделать, чтобы ускорить это? Я определил, что -dPDFSettings=/screen является то, что делает его очень медленно, но я не получаю хорошее сжатие без него ...

UPDATE: OK Я попытался обновить его, что я ниже. Правильно ли я использую участок -c 30000000 setvmthreshold?

gswin32.exe -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dCompatibilityLevel=1.3 
      -dPDFSETTINGS=/screen -dNumRenderingThreads=2 -sOutputFile=out7.pdf 
      -c 30000000 setvmthreshold -f 09.pdf 
+0

Сжатие занимает некоторое время, гарантируя, что изображения будут уменьшены как можно дальше до его начала. – Orbling

+0

К сожалению, проблема, которую я пытаюсь решить, заключается в том, что около 600 ГБ изображений с большим размером уже находятся в нашей БД. Я надеялся, что смогу уменьшить размер, используя Ghostscript, но похоже, что я могу уйти в отставку до того, как она закончится. –

+0

OCR это, тогда меньше изображения и меньше растра, и все идет быстрее :-) – user502515

ответ

29

Если вы на системе многоядерной, сделать его использовать несколько процессорных ядер с:

-dNumRenderingThreads=<number of cpus> 

Пусть использовать до 30Мб оперативной памяти:

-c "30000000 setvmthreshold" 

Попробуйте отключить мусор сборщик:

-dNOGC 

Дополнительные сведения см. В разделе Improving Performance из документов Ghoscript.

+0

Спасибо за информацию @Ismail. Я обновил свой вопрос, чтобы включить то, что я добавил, чтобы использовать RAM и ядра процессора. Не могли бы вы взглянуть на часть ОЗУ и посмотреть, правильно ли это выглядит? –

+0

Похоже, что параметр -c нуждается в двойных кавычках, а также добавлен подсказку сборщика мусора, также попробуйте дать ему больше ОЗУ и посмотреть, помогает ли это. – ismail

+3

Я всегда получаю ** Невозможно открыть исходное устройство, уходя. ** Ошибка при попытке включить в мой скрипт варианты '-c" 30000000 setvmthreshold "'. Зачем? Как избежать этой ошибки? Требует ли он прав sudo? –

6

Вы не говорите, какой процессор и какое количество оперативной памяти, на котором оснащен ваш компьютер.

Ваша ситуация такова:

  • отсканированный документ в формате PDF, размером около 500 Кб на странице на насчитайте. Это означает, что каждая страница в основном представляет собой изображение, используя разрешение сканирования (не менее 200 dpi, а может быть даже 600 dpi).
  • Вы повторно перегоняете его с помощью Ghostscript, используя -dPDFSETTINGS=/screen. Этот параметр сделает несколько вещей, чтобы уменьшить размер файла. Среди наиболее важными являются:
    1. Re-образец все (цвет или оттенки серого) изображения на 72dpi
    2. Преобразовать все цвета в SRGB

Обе эти операции вполне может «дорого» с точки зрения Использования ЦП и/или ОЗУ.

BTW, ваша установка -dCompatibilityLevel=1.3 не требуется; он уже неявно установлен уже -dPDFSETTINGS=/screen.

Попробуйте это:

gswin32.exe^
-o output.pdf^
-sDEVICE=pdfwrite^
-dPDFSETTINGS=/screen^
-dNumRenderingThreads=2^
-dMaxPatternBitmap=1000000^
-c "60000000 setvmthreshold"^
-f input.pdf 

Кроме того, если вы на 64-битной системе, попробуйте установить самую последнюю версию 32bit Ghostscript (9.00). Он работает лучше, чем 64-битная версия.

Позвольте мне сказать вам, что понижающая дискретизация 600-сантиметрового отсканированного изображения на страницу до 72dpi обычно не занимает 23 секунды для меня, но менее 1.

+0

У меня есть 2,79 ГГц и 3,5 гигабайта. Я попробовал ваш метод, и он все еще колеблется около 20 секунд. Мои документы обычно составляют 750 тыс. Страниц. Можете ли вы придумать что-нибудь еще, что я могу попробовать? –

+0

Кроме того, даже с установленным setvmthreshold, процесс использует максимум 16 Мб памяти. Я делаю что-то неправильно? –

+0

@Abe Miessler: если процесс использует максимум 16 МБ памяти, это, вероятно, означает, что он не нуждается ** больше, чем для конкретного файла. Чтобы дважды проверить, что настройка работает вообще, попробуйте установить ее значение на более низкую цифру, например 200000. Затем снова посмотрите на использование памяти. –

11

я был хруст в ~300 страницы PDF на ядре i7 и обнаружили, что добавление следующих параметров при условии значительного ускорения:

      %-> comments to the right 
-dNumRenderingThreads=8  % increasing up to 64 didn't make much difference 
-dBandHeight=100   % didn't matter much 
-dBandBufferSpace=500000000 % (500MB) 
-sBandListStorage=memory % may or may not need to be set when gs is compiled 
-dBufferSpace=1000000000 % (1GB) 

-c 1000000000 setnvmthreshold -f вещь не имеет большого значения для меня, FWIW.

+0

Не могли бы вы рассказать о том, сколько вы могли бы увеличить производительность по этим параметрам? У вас есть опыт в улучшении скорости преобразования pdf-> ps? – Lukas

1

Возможно, у меня все в порядке, но вы попробовали формат файла Djvu? Он работает как шарм для отсканированных документов вообще (даже если есть много фотографий), и он дает гораздо лучшие сжатые файлы: я получаю коэффициент в два раза без потерь в целом по B & W научным статьям.

Смежные вопросы