spectre
Full Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору fly_house Area : RU.MPEG From : Andrey Gule, 2:5020/400 (30 Июл 03 16:58) Вероятно, многие из вас видели надстройки в диалоге Job control в VirtualDubMod 1.4.13. Hекоторые, вероятно, даже не поленились заглянуть в хелп и посмотреть, зачем оно нужны. И, на сколько я знаю, ещё никто эту возможность не использовал реально. Распределённая обработка видео. Идея проста: дробим файл на части и раздаём части на обработку нескольким компьютерам. Hесколько компьютеров работают быстрее, чем один ;) В плане реализации тоже всё достаточно прозрачно. Есть главный компьютер -- Master, есть несколько управляемых - Slave. Задача на обработку видео ставится с основного компьютера, на ведомых только производится процессинг. Сразу остужу горячие головы, которые не читали хелп: распределённым способом можно производить только однопроходный процессинг. Лично мне и этого более чем достаточно, потому что файл, снятый с VHS пакетом фильтров обрабатывается со скоростью ок. 1 кадра в секунду на домашнем iCel 1.1@1.46GHz. Как только дома настали проблемы с электропитанием и держать машину включённой круглые сутки стало большой проблемой -- я начал искать другие варианты. В принципе в хелпе к ДабМоду эта фича описана довольно подробно -- нет смысла повторяться. Скажу только, что ключ командной строки "/j" у меня так и не заработал -- ну да в конце концов не так сложно запустить Даб на слейве: три простых нажатия на кнопки (если он уже отконфигурирован). Очевидно, что на каждом из клиентов должен быть ДабМод и установлены используемые фильтры и кодеки. Однако запустить ДабМод из одного сетевого каталога на получается -- вероятно, он хранит какую-то информацию о запущенной сессии в файлах конфигурации.. Короче ДабМод с фильтрами надо скопировать на каждый компьютер. Теперь что с источником и результатом. Каждая из программ использует одинаковый путь для файлов источника и результата. Потому крайне разумным является использование сетевых путей: вам не нужно держать копию файла-источника на каждой машине (очевидно, все участники процесса должны иметь разрешение на чтение из этого каталога). С результатом не всё так просто: если вы будете сохранять результат в доступной по сети папке, то вам нужно будет в два раза больше места, чем занимает файл результата. Во-первых, будут сохранятся кусочки обработанного видео, а во-вторых туда же будет сохранён склеенный файл результата - он склеивается из кусочков автоматически после окончания процессинга (потом кусочки удаляются, но в момент склеивания вам нужна прорва места ;). Так что альтернативой может быть сохранять результат в некий каталог C:\Dir\ -- но при этом надо иметь на КАЖДОЙ машине такой каталог, в который влезут все кусочки, которые эта машина будет считать. А на Мастере в этом каталоге должен поместиться ещё и склеенный файл результата. (Очевидно, что надо проверить наличие у всех участников прав на запись ;) Следующий ваш вопрос: а как с загрузкой сети? В моём случае исходник это ави (PicVideo MJPEG @ 19, 768x576) с битрейтом примерно 25 Мбит/с - все 8 компов читают с одного места - загрузка 100 Мбти сети примерно 20%. Результат (HuffYUV, 384x288) сваливается на другую машину -- там примерно такой же поток и примерно такая же загурзка сетевого интерфейса. Кодек/фильтры могут использоваться любые. Вчера я пробовал DivX 5.05 (1 проход с заданным битрейтом и 1 проход с заданным уровнем качества), сегодня -- HuffYUV 2.1.1 (patch 0.2.2). Учтите, что фильтр должен работать на ВСЕХ машинах, потому нельзя использовать, скажем, фильтр оптимизированный под iP4, если в сети есть iP!!!. Очевидно, также, что фильтры должны работать стабильно на ВСЕХ машинах. А то дома я, например, запросто использовал QS Deinterlace 0.52b, а в сети на разных компах он начал виснуть -- что вам сказать ;)) Пришлось заменить его на Smart Deinterlace 2.72b -- всё заработало, пока ни единого вылета ;) Hастройка. Hачнём с Мастера -- все настройки, которые касаются процесса кодирования в целом, выставляются именно тут. Длина сегмента -- рекомендую использовать минимальный в 1 мин. Это позволит более аккуратно распределять вычислительные ресурсы. Hапример, если есть два компьютера, со скоростью 5 и 10, то при 2 кусках скорость всего процесса будет ограничиваться скорость медленной машины. Если сделать 10 кусов, то быстрая машина сделает вдвое больше кусков -- к результату придём быстрее. Учтите, что максимальное кол-во кусков -- 512 (опять же, RTFM ;) -- но это около 8,5 часов, то есть время практически нереально большое ;))) Приоритет. Это приоритет процесса кодирования на этой машине, то есть эта настройка должна быть выставлена на КАЖДОЙ машине. Кстати, тут же выставляется приоритет и для кодирования в обычном режиме -- что я только не делал, чтобы заставить ДабМод 1.4.13.2.2 кодировать всегда в Idle! ;)) Мда, так вот я рекомендую всегда и везде ставить Idle, и просто не возвращаться к этому вопросу. В этом режиме ВСЕ программы на компьютере имеют приоритет над Дабом, так что Даб по сути собирает "остатки" процессорного времени за всеми остальными программами. Always restart jobs. Означает будет ли даб продолжать задачу, в случае если в каталоге результата есть уже какие-то части с таким же именем файла, как у результата -- или начнёт считать задачу заново. Process Audio - рекомендую выключать. Всё равно обработка с аудио происходит на несколько порядков быстрее, чем видео -- аудио проще сделать на одной машине и потом приклеить к результату. Дело в том, что с синхронизацией аудио возникают некоторые проблемы, за подробностями -- в доку, кому интересно. Send slave to tray - минимизирует окно Job control на Slave машине в system tray. Как видите, настройки элементарны. Создаём задачу на Мастер машине как обычно -- пути к файлам используем как я сказал выше, Save AVI, ставим галку Put in job list. Можно запросто таким образом обрабатывать несколько задач. Ещё одно напоминание для неумеющих читать хелп: все машины должны быть в пределах одного сегмента сети. И -- только один мастер на сетевой сегмент. Только одна распределённая задача. Собственно запуск процесса. Мастер: запускаем VirtualDubMod, F4 (Job control), Update, Master, Start. Мастер начинает обработку своего кусочка первой задачи из списка. Каждый слейв: запускаем VirtualDubMod, F4 (Job control), Update, Slave. Слейв ждёт от мастера информации о своей задаче и начинает её обработку. За всем процессом очень наглядно можно наблюдать с Мастера -- опять же RTFM что означают цвета на градуснике. Любой из слейвов можно исключить из процесса кнопкой Abort -- его незаконченный кусок Мастер отдаст другому слейву. А потом, при желании, этот же слейв можно опять подключить к процессу, см. выше как. Удобны также кнопочки Shutdown clients when finished (выключать слейвы по окончании процесса) и Shutdown when finished (выключение Мастера). Я у себя в сети проверял работу на Windows XP, XP SP1, 2000 SP2. Попытка запустпть клиентк на Windows 98 SE привела к тому, что ДабМоды Мастера и на 98й вошли в состояние Not respondning -- причём надо отдать должное, что после прибивания Даба на 98й процесс продолжился -- у Мастера прогресс прыгнул вперёд на 2% (это другие компы наработали ;) Забавно, кстати, что эту возможность не включили в очередную версию ДабМода: 1.5. Я использовал последний из линейки 1.4: 1.4.13.2.2. Результат: вместо 20 часов, которые задача собиралась считаться на домашнем iCel 1.1@1.46GHz кластером из 8 компьютеров от 866MHz до 2,4GHz задача была выполнена за 4 часа - при этом все сотрудники спокойно работали на своих машинах как обычно. "Эффективная скорость" кластера составила примерно 7,5 GHz -- сами понимаете, такой скорости на современных компьютерах не достигнешь. Один из компов среди работы надо было выключить - на качестве результата это не сказалось. --EOF |