![]() |
Распаралелить обработку изображений
Здравствуйте, мне нужна помощь в решении следующей задачи:
Надо периодически обрабатывать серии снимков накладывая на них серийный номер. (на каждое изображение наносится номер начиная с единицы и так далее) Выглядит очень упрощённо так: Код:
for %%a in( *.png ) do ( На обработку ~400 картинок уходит ~30 минут. (Там не просто текст приклеивается а хитрым образом обрабатывается для контраста.) У машинки на которой выполняется эта задача четыре ядра и я подумал нет ли возможности распаралелить задачу на четыре потока. Основная проблема что количество картинок всегда разное и нужен серийный номер. Я батниках не совсем новичок но как решать подобную задачу не знаю. Нужна помощь хотя бы на уровне алгоритма. |
с помощью cmd получится разве что разделить на 4 части для действий какого-то инструмента разделяющего ядра и понятно что это наоборот - еще увеличит общее время выполнения задачи.
|
Можно попробовать через ffmpeg с параметром -threads.
|
ateka, картинки какой общий объём занимают? Можете ли Вы их выложить (пока не выкладывайте, вопрос задан как теоретический)?
Кроме того, покажите полный код Вашего пакетного файла. Всё ж, полчаса на наложение текста на 400 изображений (если они не по полгигабайта), на мой взгляд, многовато. P.S. И что значит «серийный номер»? В чём его отличие от просто порядкового номера? |
Iska, я сначала тоже так думал но похоже в эту сторону копать бесполезно.
Картинки меньше 1М и дело именно в обработке. Приведу абстрактный пример: Посмотреть картинку:
![]() Как видно текст отлично виден на любом фоне но его обработка занимает много ресурсов. Код для примера взят с сайта ИМ. Скрытый текст
:: https://www.imagemagick.org/Usage/annotating/ convert -size 100x14 xc:none -gravity center \ -stroke black -strokewidth 2 -annotate 0 'Faerie Dragon' \ -background none -shadow 100x3+0+0 +repage \ -stroke none -fill white -annotate 0 'Faerie Dragon' \ dragon.gif +swap -gravity south -geometry +0-3 \ -composite anno_fancy.jpg Я ещё возможно спрошу на оффоруме но шансы невелики. -------------------------------------------------------------------------------------------------- Я нагуглил следующее решение проблемы. Есть такая утилита https://github.com/lordmulder/MParallel Простая как бублик. Пример кода: Скрытый текст
echo. >Build_01X1.txt
for %%a in (.\temp\*.png) do ( echo magick "%%a" -flip ".\output\%%~nxa" >>Build_01X1.txt ) MParallel --input=Build_01X1.txt Визуально видно что отрабатывает по четыре процесса. Но прирост скорости даёт только вдвое. На машинке камень 2х2. Видимо маджик умеет в гипертрединг. Наверное вопрос можно считать решённым. Но мне в принципе интересно каким образом распаралеливают задачи для батников. Например я уверен что у уважаемого Мегаломана есть изящное решение. Интересена не конкретика а алгоритм. |
Цитата:
Цитата:
Цитата:
Код:
magick.exe -version А так: Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
Код:
@echo off |
Цитата:
Цитата:
Так
Код:
magick.exe logo: -resize 2000% null: ![]() Цитата:
|
Время: 23:28. |
Время: 23:28.
© OSzone.net 2001-