Кто работает с Deshaker для VirtualDub, отзовитесь! Считается, что это самый лучший программный стабилизатор из всех. У кого какая информация по нему есть?
Есть перевод официальной документации на плагин с их офсайта, сделанный TAB. Выложу, может надо кому. _________________________________________________________
Deshaker это стабилизатор видео для VirtualDub. Он устраняет дрожание камеры и делает смещение, вращение и масштабирование плавным.
Возможности:
- Стабилизация горизонтального и вертикального смещения, вращения и масштабирования - Работает с помощью 2-х проходов для оптимального моделирования движения камеры - Может использовать предыдущие и следующие кадры для заполнения "черных полей", вызванных стабилизацией - Опциональный вывод на экран векторов движения в течение первого прохода - Большое количество настроек для подготовленных пользователей - Возможно ручное покадровое управление
Установка
Скачайте Deshaker, скопируйте Deshaker.vdf в папку фильтров VirtualDub и перезагрузите VirtualDub.
Краткий справочник
Здесь описаны минимально необходимые операции по стабилизации видео
1. Откройте видеоклип в VirtualDub и добавьте фильтр Deshaker 2. Установите правильные значения Source pixel aspect и Video type 3. Убедитесь, что выбран Pass 1 (первый проход) 4. Проиграйте видео каким-либо образом, например нажав кнопку Output Play в VirualDub, или сохраните клип (Save as AVI) во временный файл. Во время первого прохода не создается какого-либо клипа, пригодного к просмотру. 5. Выберите Pass 2 (второй проход) и установите необходимые значения Destination video size и Destination pixel aspect 6. Кодируйте видеоклип обычным способом
Параметры по умолчанию подходят для большинства случаев. Однако, изменив некоторые установки, вы всегда можете получить лучшие результаты для конкретного видеоклипа. Для этого необходимо понимать, как работает фильтр и здесь дано описание его работы.
I. Как работает фильтр
В течение первого прохода фильтр пытается найти смещение, вращение и масштабирование таким образом, чтобы, применив эти значения к текущему кадру, мы получили бы кадр похожий на предыдущий. Для этого берутся блоки пикселей из обоих кадров и находится взаимное смещение, обеспечивающее минимальную разницу между блоками. Сначала ищется общее движение, для этого масштаб (количество элементов) изображения уменьшается и вычисляется начальное смещение всего кадра. Это смещение затем уточняется в удвоенном масштабе, где количество элементов в четыре раза больше относительно предыдущего, затем масштаб еще раз удваивается и так далее. В завершении мы получаем смещения (или вектора движения) для всех блоков кадра. Фильтр затем находит оптимальные значения смещения, вращения и масштабирования кадра, основанные на этих векторах движения, эти значения записываются в лог-файл.
На втором проходе, на основании данных лога, рассчитывается оптимальное движение камеры с целью сглаживания его траектории. Затем фильтр преобразует каждый кадр в соответствии с этим движением.
1. Параметр Source pixel aspect: Сообщает фильтру соотношение сторон пикселя в исходном видеоклипе. Очень важно правильно указать это значение, иначе например вращение будет сделано некорректно.
2. Параметр Log file: Имя лог-файла, который записывается на первом проходе и читается на втором.
3. Параметр Append to file: Если установлено, новые данные будут добавляться к файлу вместо перезаписи.
4. Параметр Video output: Определяет, что показывается на экране в процессе первого прохода. Если выбрано Motion vectors вы будете видеть предыдущий кадр со стрелками показывающими как движутся блоки по сравнению с текущим входным кадром. Только белые стрелки используются для вычисления параметров смещения, вращения и масштабирования. Для чересстрочного видео оба поля будут показаны, первое над последним.
5. Параметр Block size: Ширина и высота блоков, используемых для сопоставления.
6. Параметр Scale: Максимальный масштаб при анализе кадров. Full самый качественный, но очень медленный.
7. Параметр Use pixels: Сколько пикселей в блоке используется в сравнении. All самый качественный но очень медленный.
8. Параметр Color mode: Анализ кадров может быть в цвете или без (серая шкала). Серая шкала немного быстрее, но сопоставление хуже. Этот параметр не влияет на отображение цвета в выходном клипе на втором проходе.
9. Параметр Initial search range: В максимально уменьшенном масштабе, этот процент определяет максимальное смещение при сопоставлении блоков. Низкие значения немного ускоряют процесс.
10. Параметр Differential search range: Когда фильтр переходит к удвоенному масштабу в процессе анализа, приблизительное движение уже известно. Differential search range определяет на сколько пикселей может еще измениться смещение относительно этого значения. Низкие значения делают процесс быстрее, но если в клипе есть очень быстрые/большие вращения и/или масштабирование, сопоставление может не получиться для некоторых блоков.
11. Параметр Discard motion of blocks that have match value less than X: Если итоговое значение смещение для определенного блока будет меньше указанного здесь значения, этот блок не будет участвовать в анализе. Блоки, зависящие от этого блока в более высоком масштабе, также будут игнорироваться. Вектора движения этих блоков не будут показаны во время первого прохода.
12. Параметр Discard motion of blocks that have 2nd best match larger than best minus X: Если, в процессе анализа, для какого-то блока будет найдено смещение, которое будет отличаться от предыдущего больше чем на указанную величину, этот блок будет игнорироваться. Такое может получиться для однородных участков кадра (напр. голубое небо), где любое найденное фильтром смещение будет ложным. Блоки, зависящие от этого блока в более высоком масштабе, также будут игнорироваться. Вектора движения этих блоков не будут показаны во время первого прохода.
13. Параметр Discard motion of blocks that move more than X pixels in wrong direction: Во время расчета, вектора движения некоторых блоков могут противоречить общей траектории. Если вектор движения какого-то блока дает смещение больше чем на указанное количество пикселей в ложном направлении, он исключается из расчета траектории. Такие вектора показаны красным цветом во время первого прохода. Т.к. любое движение камеры отражено в кадре только двумя координатами, такие вектора могут отражать изменение перспективы, когда она меняется достаточно сильно. Это может быть на широкоугольных камерах при быстром приближении/удалении. В этих случаях следует увеличить Х (или может быть ограничить область анализа зонами кадра с удаленной панорамой). Когда камера неподвижна, "эффект перспективы" низкий и можно использовать низкие Х для повышения точности.
14. Параметр Skip frame if less than X percent of blocks are ok: Если достоверными будут признанны меньше чем Х процентов всех блоков (другими словами большинство блоков игнорируются), этот кадр пропускается (смещение и вращение устанавливаются как 0, масштабирование как 1).
15. Параметр Ignore image area outside area: Только area используется в анализе. Если вы отметите Let area follow motion область будет следовать за траекторией между разными кадрами. Вы можете использовать это если вы хотите стабилизировать движущийся объект вместо фона. Только не ожидайте при этом хорошей работы J.
16. Параметр Ignore image area inside area: Area не будет использована в анализе.
17. Параметр Destination pixel aspect: Указывает фильтру соотношение сторон пикселя выходного видео. Если предполагается просмотр на компьютере следует установить квадратный пиксель.
18. Параметр Destination video size: Размер кадра выходного видео.
19. Параметр Resampling: Алгоритм обработки видео. Помните, что любой из применяемых здесь алгоритмов, не является оптимальным, когда размер кадра выходного видео много меньше чем входного. Если требуется изменить размер, пользуйтесь специально предназначенными фильтрами, установив их после Deshaker.
20. Параметр Edge compensation: Побочным эффектом стабилизации являются черные бордюры. Вы можете уменьшить бордюры применив режим Adaptive zoom. Этот режим определяет дополнительное масштабирование кадров с целью уменьшения бордюров. Этот дополнительный зум затем сглаживается в общей траектории движения, так что бордюры иногда все-таки появляются. Различием между Adaptive zoom и Adaptive zoom only является то, что в первом случае зум сглаживается как по исходному клипу, так и по дополнительной коррекции, во втором случае сглаживается только дополнительное масштабирование, зум исходного видео остается неизменным и не стабилизируется. Используйте этот режим, если в исходном видео отсутствует изменение зума. Вы можете также выбрать Fixed zoom – фильтр выберет постоянный коэффициент увеличения, обеспечивающий отсутствие бордюров. Используйте низкий correction limits (см. ниже) для уменьшения количества зума.
21. Параметр Previous and future frames to fill in borders: Это разновидность дополнительной компенсации бордюров. Когда в текущем кадре не хватает какой-либо информации, эта опция может найти ее в предыдущих или следующих кадрах. До тех пор, пока эта информация была частью одного и того же объекта (или фона) эта опция работает хорошо. Но когда новый объект появляется в этих областях, появятся заметные искажения. Но в любом случае, обычно это лучше черных бордюров и эту опцию рекомендуется использовать. Но убедитесь, что обрезаны какие-либо бордюры во входном видео до этого фильтра. В противном случае эта опция будет не так хорошо работать.
Если номер текущего кадра 50, этот режим будет искать нужную информацию в следующем порядке: 50, 49, 51, 48, 52, 47, 53, 46, 54 и т.д. Таким образом, все пиксели ближайших (хронологически) кадров будут задействованы. Вы можете указать, сколько кадров будут запоминаться и использоваться в этой операции. Больше – всегда лучше, но помните, каждый кадр требует прибл. 1.5 МБ памяти и это может занять дополнительное время для поиска нужной информации в большом количестве кадров.
Т.к. VirtualDub не дает прямого доступа к будущим кадрам, фильтр использует небольшой трюк. Он запоминает кадры и задерживает выход на указанное в опции количество кадров. Это может создать пару проблем, которые впрочем можно устранить. Во первых, необходимо задержать аудио. Вы можете это сделать в VirtualDub в меню Audio/Interleaving. В процессе запоминания кадров, текст на экране подскажет необходимую задержку в миллисекундах. Во вторых, необходимо сдвинуть в VirtualDub маркер окончания клипа на указанное количество кадров. В противном случае, последние кадры будут потеряны. Если маркер находится в самом конце клипа, то приклейте к нему несколько произвольных кадров – они в любом случае не будут использованы.
Когда эта опция не задействована, вы можете перемещаться по клипу как угодно. Но когда эта фича используется, так делать больше нельзя. Здесь необходимо пройти стадию запоминания кадров прежде чем начинать обработку. Обычно, если клип который вы хотите обработать содержит 100 кадров (нумерация 0-99 во входном клипе), и используются 30 будущих кадров, вы должны вручную "прошагать" первые 30 кадров (0-29). Затем, строго после этого, кодируйте кадры 30-129.
Попробуйте использовать эту опцию на клипах с панорамной съемкой и с зумом (отъезд) с Extra zoom factor установленным 0.6. Вы получите эффект панорамы. Это медленно, но итересно J.
22. Параметр Extra zoom factor: Дополнительный коэфф. увеличения. Это может к примеру применяться вместе с fixed zoom для компенсации бордюров таким образом, чтобы они были но находились в области оверскана и не были видны на ТВ. В этом случаи максимум информации из кадра попадет на экран, но бордюры видны не будут.
23. Параметр Motion smoothness: Эти значения определяют параметры сглаживания траектории. Вы можете установить 0 для отключения стабилизации. Это может быть полезно, если вы например не хотите стабилизировать зуум. Но вы должны использовать довольно высокие значения в случае использования adaptive zoom для компенсации бордюров. Вычисления параметров траектории базируются на счетчике кадров, а не времени, поэтому поэтому нужно использовать большие значения для интерлейсного видео для такого же эффекта. Если вы установите значение -1 вы получите "бесконечное" сглаживание, что означает стационарно зафиксированную относительно первого кадра камеру. Но это не очень хорошо работает.
24. Параметр Max. correction limits: Удерживает коррекцию в заданных пределах в случае особенно быстрых смещений камеры. Особенно полезно когда используется Fixed zoom в качестве компенсации бордюров, не позволяя слишком сильное увеличение. Все, что эта опция делает, так это автоматически понижает степень сглаживания в тех фрагментах клипа, где это необходимо.
Не забывайте установить соотношения сторон пикселя входного клипа. Например, если ваше видео имеет размер 720х480, 704х480 или 352х240 это вероятно NTSC, а если 720х 576, 704х576 или 352х288 то вероятно PAL.
Если в клипе нет изменения зума, используйте Adaptive zoom only для компенсации бордюров, а если компенсация не используется, установите zoom smoothness равной 0. Это нужно поскольку стабилизатор зума не различает реальное зумирование от перемещения камеры вперед-назад.
Часто возникают проблемы из-за перемещения больших объектов в кадре. В этих случаях фильтр пытается следовать за большими объектами (обычно это фон). Опция discards blocks that move more than X pixels in wrong direction может до некоторой степени избавить от этого. Низкие значения делают это "следование" только за очень уж большими объектами, большие значения делают это "следование" средним по всем объектам (что снижает вероятность "следования" в ложном направлении). Вы можете также использовать image matching area для управления, за какими объектами нужно "следовать".
Deshaker хорошо работает для видео, снятого с короткими выдержками. В противном случае, вы можете увидеть эффект motion blur при отсутствии движения.
Видео снятое широкоугольным объективом может не очень хорошо выглядеть после фильтра. Избегайте использования широких углов для уменьшения угловых искажений.
Иногда автоматическая стабилизация может не дать нужного вам результата. Это обычно случается когда объекты съемки небольшие и их движение не совпадает с движением крупных объектов. В процессе создания клипа вы можете захотеть использовать разные настройки первого прохода для различных частей клипа (или даже отдельных кадров). Вы можете использовать два способа:
Использовать опцию Append to file для продолжения записи в лог. Вы можете затем изменить настройки, прогнать несколько кадров, сменить снова, пройти опять и т.д. Номера кадров записываются в лог-файл, так что вы можете вернуться назад и восстановить несколько кадров. Если кадр записан несколько раз, во втором проходе используется последняя запись.
Вы можете редактировать лог вручную. Значения в каждой строке лога означают следующее (слева направо): номер кадра, x- и y- смещение (в пикселях), вращение (в градусах) и зум фактор. Вы можете удалять строки, для отсутствующих в файле кадров считается смещение 0, вращение 0, зум 1.
Сообщение отредактировал Alexei_Sever - 15.12.2009, 17:02
Deshaker поддерживает интерлейсное видео. Так что этот раздел отчасти не нужен. Но в любом случае, это еще один способ стабилизировать интерлейсное видео.
Используйте мой smooth deinterlacer (или другой) для генерации 50 или 60 FPS полноразмерного видео.
Установите в Deshaker прогрессивный тип видео (для обоих проходов).
Запустите получившееся видео через небольшой скрипт AVISynth:
AVISource("deshaked.avi") SeparateFields() SelectEvery(4, 1, 2) (или SelectEvery(4, 0, 3) определяется порядком полей) Weave()
Если вы остановитесь на втором шаге, вы получите сглаженное 50 или 60 FPS полноразмерное видео, которое отлично будет выглядеть на компьютере. Однако его нельзя будет посмотреть на ТВ.
Считается, что это самый лучший программный стабилизатор из всех.
Это не считается, это тестами подтверждается. Я давно где-то видел большой тест стабилизаторов с видеороликами и Deshaker в нём делал всех и Mercalli тоже.
Это руководство частично основано на статье John Meyer “A guide to using Deshaker”, некоторые несущественные разделы пропущены, зато добавлены комментарии Предполагается, что вы знакомы с программой VirtualDub и смогли загрузить и установить сам плагин Deshaker.vdf, а также прочитать документацию к нему.
Введение
Deshaker – это лучший из общедоступных на сегодняшний день стабилизаторов видео. Принцип его работы заключается в следующем. Фильтр работает в два этапа. На первом этапе происходит определение движения в кадре, сходным образом с тем, как работают MPEG-подобные кодировщики, а именно: кадр разбивается на [квадратные] блоки, для каждого блока ищется соответствующий ему блок в предыдущем кадре и вычисляется вектор смещения этого блока относительно соответствующего блока предыдущего кадра. На малоконтрастных участках изображения, как правило, трудно установить однозначное соответствие между блоками, поэтому часть векторов смещения может оказаться неопределённой. После того, как смещения всех подходящих блоков этого кадра найдены, для кадра вычисляется четыре величины, характеризующие его движение относительно предыдущего кадра: сдвиг центра по горизонтали, вертикали, поворот и изменение масштаба. Эти величины записываются в LOG-файл. На втором этапе по этому LOG-файлу вычисляется траектория движения камеры, имевшая место при съёмке, и сглаженная траектория, которую хочется получить в результате стабилизации. Далее каждый кадр смещается, поворачивается и масштабируется в соответствии с желаемой траекторией движения. Естественно, что при этом участки на краю полученного кадра могут отсутствовать в исходном кадре, в этом случае они берутся из соответствующих областей предыдущих и последующих кадров (тоже соответствующим образом смещённых). Как правило, если на краю кадра не было движущихся объектов, то такое добавление информации из соседних кадров не создаёт артефактов. Таким образом, два основных преимущества Deshaker – это работа в два этапа, что позволяет заранее просчитать траекторию камеры и необходимые поправки, и возможность использования информации из соседних кадров для добавления недостающих участков по краям изображения. Ещё одно преимущество для опытных пользователей – наличие множества настроек и возможность вручную редактировать LOG-файл для исправления ошибок детектора движения на отдельных кадрах.
Загрузите клип в VirtualDub и добавьте фильтр Deshaker. В настройках необходимо установить следующие параметры:
1. Source Pixel Aspect (пропорции пикселя исходного видео) – установите соответственно с типом источника видео. Для miniDV это будет Standard PAL (1.094) или Standard NTSC (0.911).
2. Video Type (тип видео) – бывает прогрессивным или чересстрочным, в последнем случае необходимо указать порядок полей. Для большинства miniDV камер нужно ставить Interlaced, Lower field first; для съёмок в прогрессивном режиме – None (Progressive).
3. Log file (имя LOG-файла) – я предпочитаю не хранить их в корневом каталоге диска C :-) В секции Pass 1 можно ничего не трогать, но для более качественного анализа движения можно поставить Scale=Full и Use pixels=All. Однако это замедляет работу первого прохода в 2-4 раза.
4. В секции Pass 2 выставляем Destination pixel aspect такой же, как Source pixel aspect, и желаемый размер кадра (вероятно, лучше ставить такой же, как исходный кадр – 720x576 для PAL miniDV, 720x480 для NTSC miniDV).
5. Включите галку “Use previous and future frames...”, числа можно оставить по умолчанию
6. Значения в секции Motion smoothness можно увеличить в несколько раз относительно значений по умолчанию. При больших величинах (более 10000), впрочем, движение может выглядеть неестественно.
7. Значения Max correction limits можно не трогать, хотя John Meyer рекомендует выставить их в максимум (99)
8. Наконец (важно!), щёлкните обратно вкладку Pass 1 и жмите OK.
Теперь необходимо запустить первый проход фильтра. Перемотайте в начало клипа кнопкой (|<) и запустите проигрывание выходного видео кнопкой (>O) (или запустите Preview клавишей F5). Откиньтесь на спинку кресла, как говорится.. первый проход занимает достаточно много времени. Тем не менее бывает полезно пронаблюдать за работой фильтра на этом этапе. Он выдаёт в правом окошке ккадр с наложенными на него векторами смещения для блоков (если видео чересстрочное, то два поля одного кадра располагаются друг под другом). Внизу каждого поля информационная строчка показывает найденные величины смещения, поворота и масштабирования. Если строчка красная со значениями “0, 0, 0, 1”, то дело не в порядке – в этом кадре оказалось слишком мало подходящих для анализа движения блоков. Вполне возможно, что на этом месте будет скачок при стабилизации. О способах борьбы с этим см. ниже в детальных настройках.
Когда первый проход закончен, не нажимая никаких клавиш движения и перемотки, зайдите в меню Filters, вновь выберите Deshaker и нажмите вкладку Pass 2. Поскольку все настройки второго прохода мы уже сделали, можно нажимать OK и запускать второй проход. При первом нажатии клавиш перемотки Deshaker выдаст табличку с предупреждением, что требуется некоторое время для стабилизации видео (оно зависит от настроек плавности движения, но обычно составляет малую долю от продолжительности второго прохода, который, в свою очередь, быстрее, чем первый). Также вам стоит выставить видео кодек, если вы ещё этого не сделали. Итак, нажимайте “Save as avi” и скоро стабилизированный видеоклип будет готов.
1. Легко заметить, что в полученном файле в начале идёт некоторое количество чёрных кадров с надписью, а в конце такое же количество кадров обрезано, при этом звук остался на месте, а значит, сдвинут относительно изображения. Если внимательно почитать эту надпись, то станет ясно, что для звука нужно задать задержку (в меню Audio/Interleaving пункт “Delay audio track by ... ms”, число миллисекунд фильтр подсказывает). Это происходит потому, что внутренний интерфейс работы VirtualDub с фильтрами не предусматривает выдачу кадров с опережением, что необходимо для Deshaker'овского метода восстановления краёв изображения по данным предыдущих/следующих кадров. Поэтому, если задано ненулевое число N “следующих” кадров, то Deshaker задерживает выдачу изображения на N кадров, помещая их во внутренний буфер. Чтобы компенсировать эту особенность и получить выходной файл с тем же количеством содержательных кадров, что и входной, нужно на втором проходе применить такой метод:
- Добавить к видеоряду ещё какой-нибудь файл (Append avi segment); какой именно, неважно, главное, чтобы в нём было не меньше N кадров и при этом параметры файла (размер кадра, тип сжатия и т.д.) были такими же. Можно использовать и сам исходный файл.
- Задать задержку звука, как описано выше. Задать диапазон кадров (Video/Select range) такой: Start offset=N (кадров, а не миллисекунд!), длина Lenght равна длине исходного клипа (её нужно запомнить перед добавлением Avi segment).
- Передвинуть курсор на начало клипа и промотать покадрово (стрелкой вправо) ровно N кадров. На последнем шаге в правом окне должно появиться изображение вместо чёрного экрана с надписью.
- Нажимать Save as AVI. Внутренний буфер фильтра уже заполнен первыми кадрами, и он сразу начинает выдавать изображение.
Аналогично, для просмотра видео без сохранения требуется промотать вперёд N кадров, прежде чем фильтр начнёт выдавать изображение.
2. Настройки второго прохода (например, плавность) можно менять для получения желаемого результата, при этом, очевидно, нет необходимости прогонять заново первый проход.
3. Чтобы не настраивать каждый раз параметры фильтра, можно воспользоваться механизмом Save/Load processing settings (меню File). Один раз сохранив настройки, можно при следующем запуске VirtualDub, открыв видеофайл, загрузить эти настройки (это будут параметры фильтра, кодек, задержка аудио, в общем, всё, кроме имени исходного видеофайла). Может быть, потребуется поменять только имя log-файла, если вы предпочитаете сохранять разные log-файлы для разных видеоклипов.
4. Если вам нужно обработать в пакетном режиме много видеофайлов, то можно для первого прохода задать установку Video output=None (на вкладке Pass 1). Тогда вместо векторов движения выдаётся пустой квадратик 8х8. Соответственно, если в пакетном режиме (batch mode) сохранять пустой видеофайл от первого прохода, он не займёт много места. Второй проход лучше уж делать в ручном режиме, по крайней мере если требуется точное выставление начала/конца клипа, как описано выше.
Расписанные выше установки достаточно хорошо работают в обычной ситуации, когда видео снято с одной точки, трансфокатор (zoom) установлен не на минимум, и в кадре не присутствуют объекты значительных размеров, двигающиеся в разных направлениях. Если вам кажется, что стабилизация недостаточна, можно увеличить значения параметров Motion smoothness на втором проходе. Я использовал величины до 18000. Однако это имеет и негативную сторону: при слишком больших значениях, если исходное изображение было достаточно дёрганым, на краях полученного кадра могут возникать странные явления. Это результат работы алгоритма edge compensation, т.е. заполнения нехватающих участков по краям данными из соседних кадров. Если в кадрах были движущиеся объекты вблизи краёв изображения, то подстановка участков из соседних кадров будет давать несоответствующее текущему кадру положение этих объектов относительно фона. Как правило, эти "плывущие" края не будут видны на телевизоре, т.к. на нём края изображения обрезаются (приблизительно 5%, так называемый overscan). Однако, если вы предполагаете смотреть видео на мониторе, то можно применить дополнительное увеличение центральной части кадра (Extra zoom factor установить чуть больше единицы, например, 1.05 или 1.1). Нужно понимать, что при этом мы несколько теряем в разрешении, т.к. некоторая область кадра растягивается на весь кадр.
В общем, установки плавности нужно подбирать в зависимости от "дёрганности" исходного видео - если оно было не сильно дёрганным, то можно добиться большей плавности, если же нет, то придётся ограничиться некоторым смягчением дёрганий, но полностью избавиться от них вряд ли удастся, т.к. повышение плавности будет приводить к слишком большим артефактам на краях кадра.
Если, несмотря на повышение параметров плавности, видео всё равно дёргается, то, вероятнее всего, это вызвано неправильным определение движения на первом проходе. К примеру, если вы ведёте камеру вслед за большим движущимся объектом, то алгоритм поиска движения не сможет корректно отделить движущийся фон от движущегося в другом направлении объекта, который занимает значительную часть кадра. Вектора движения блоков будут направлены в разные стороны, и в зависимости от того, каких оказалось больше, движение всего кадра будет определяться то по фону, то по объекту. Разумеется, при попытке стабилизировать полученный видеоряд мы увидим дёргание картинки.
Чтобы исправить положение, нужно явным образом указать программе, какая часть кадра движется за счёт движения камеры (т.е. является фоном, и именно его движение чаще всего надо стабилизировать), а какая - сама по себе. Для этого в Deshaker имеется семейство параметров Ignore image area. Чтобы исключить из рассмотрения объект в середине кадра, установите параметры в строке inside: к примеру, вы хотите оставить только верхнюю и нижнюю четверти экрана, введите 144 (=высота кадра/4) в поля Top и Bottom. Возможна ситуация, когда, наоборот, нужно рассматривать только центральную часть кадра, тогда задайте значения в строке outside. Эту область легко контролировать при просмотре первого прохода: игнорируемая область закрашивается чёрным. Нужно, однако, следить за тем, чтобы в оставшейся части кадра было достаточно блоков с определяемыми векторами движения. Возможно, следует уменьшить размер блока, задаваемый параметром Block size (по умолчанию 30), только при этом ещё нужно установить Use pixels=All(most robust).
Если вы снимаете движущейся камерой, такое видео гораздо труднее поддаётся стабилизации (разумеется, это представляет сложность не только для Deshaker'а, но и для любого другого подобного программного стабилизатора). Тем не менее, Deshaker достаточно хорошо работает и в этом случае. В таких ситуациях может помочь параметр “Discard Motion of Blocks That Move >x Pixels in the Wrong Direction”, который управляет отбраковкой блоков, движущихся не в том направлении. Можно попробовать поднять его значение с 5 до, скажем, 15 или даже 30. Действие этого параметра видно на первом проходе: в случае нетривиального движения камеры блоки в кадре могут двигаться в самых различных направлениях. Красные вектора движения обозначают блоки, которые двигаются не в том направлении, что большинство блоков (а именно, вектор движения блока отличается как раз на x пикселей от среднего вектора движения для этой области кадра). По-хорошему, красные стрелки должны быть как раз у тех блоков, которые действительно принадлежат движущимся объектам в кадре, а те области, движение которых вызвано движением самой камеры, должны иметь белые вектора, в этом случае движение камеры определяется достаточно уверенно. Этот параметр и призван в какой-то степени управлять отбраковкой ненужного движения. Кстати, в обычном случае достаточно плавного движения автор фильтра рекомендует уменьшить этот параметр до 1 (на мой взгляд, довольно спорно).
Параметры из группы “Ignore Image Area” также могут использоваться в случае движения камеры: например, если вы снимаете пейзаж из окна автомобиля, то в нижней части кадра, вероятно, ннаходятся быстро движущиеся объекты ближнего плана, а в верхней - практически неподвижный дальний план, и можно пытаться привязываться именно к нему. Также можно попытаться поиграть параметром “Discard motion of blocks that have match value <...”: попробуйте увеличить его с 300 до 500 или 600. Если не поможет, попробуйте уменьшить до 100-150.. Этот параметр вместе со следующим (Discard blocks that have 2nd best match > best-...) управляет отбраковкой блоков в малоконтрастных участках изображения. Уменьшая их, вы увеличиваете количество блоков с определяемым движением, но при этом в таких малоконтрастных областях (небо, облака, или даже поверхность воды) движения блоков могут определяться некорректно. Впрочем, неправильно определённые вектора движения отбрасываются параметром ...move > pixels in wrong direction. По собственному опыту, если в кадре слишком мало определённых блоков, то стоит уменьшать два вышеназванных параметра, чтобы увеличить их число (особенно если блоков настолько мало, что Deshaker не считает возможным достоверно определить по ним движение всего кадра. Это происходит, если их меньше 5% (по умолчанию; регулируется параметром Skip frame if <x% of blocks are OK), при этом на первом проходе строка статуса красная. В этом случае обязательно надо попытаться уменьшить "критичность" детектора движения для блоков, хотя можно и уменьшить порог отбрасывания всего кадра, иначе почти наверняка в этом месте возникнет скачок в полученном видео. Хотя если переборщить с параметрами, то случайные движения малоконтрастных блоков внесут большие помехи в результирующее движение кадра.
В конце концов, ничто не мешает разные куски клипа обрабатывать с разными установками (например, если движущийся объект, который нужно проигнорировать, находится то в левой, то в правой частях кадра), а полученные LOG-файлы склеить в обычном текстовом редакторе. Если же отдельные кадры никак не поддаются разумному определению движения, то самый простой вариант - исправить для них значения в LOG-файле руками. Например, задать такими же, как у соседнего кадра. В каждой строке LOG-файла содержится информация об одном кадре или (для чересстрочного видео) об одном поле: смещение по X, по Y, поворот и увеличение.
Как правило, движение камера, также как и движение отдельных объектов в камере, создаёт эффект "motion blur", или размытие в движении. Это проявляется в том, что объекты размыты вдоль направления смещения. Глаз не замечает этого на быстро движущихся объектах, но если вы стабилизируете видео, то такие области кадра будут казаться расфокусированными, а из-за того, что скорость движения меняется от кадра к кадру, эта расфокусировка ещё и будет "плавать" по амплитуде. Это может выглядеть довольно неприятно, но, к сожалению, не поддаётся исправлению. Вам решать, какое видео смотреть менее неприятно: дёрганное или расфокусированное. Тем не менее, если ваша камера позволяет регулировать скорость затвора, и вы планируете пользоваться программной стабилизацией, то стоит установить скорость затвора меньше обычной (хотя бы 1/100 с, а лучше 1/200; меньше, как правило, не требуется).
Выводы
Deshaker - очень гибкий и мощный инструмент для устранения дрожания видео. Обычные установки хорошо работают для большинства случаев; если же хочется большего, то и для тонкой настройки полно возможностей.
t;line-height:100%">С пожеланиями творческих успехов, Евгений Васильев.