Скриптовый монстр для обработки видео (Deshaking)

На 250-коптере у меня стоит камера Mobius Wide Lens, которой я снимаю в 1080p 30Hz (29,970 Hz). Формат записи - MP4.

Я сделал титанический скрипт для автоматического deshaking’а ряда клипов с помощью VirtualDub+Deshaker.

Настройки процесса (а их много) подключаются через отдельные файлы с возможностью наследования и перекрытия. Например, есть настройки по-умолчанию, от них наследуется настройка для Mobius и перекрываются десяток настроек, специфичных для этой камеры. От настроек для Mobius наследуется еще более специфичный файл, в котором перекрывается 1-2 настройки.

Обработка идет с вырезанием нужного участка (первый и последний фрейм задаются в параметрах) и выполнением deshaking’а с рендерингом в FFDshow для монтажа (маленький размер файла и плохое качество) и Lagarith для финального рендеринга (большой размер, без потери качества). FFD иногда создает файл с мусором, так что рендеринг в него можно отключить. Просматривается Lagarith быстро в VirtualDub и Windows Media Player, но не в VLC.

Также пишется лог, в котором фиксируется время работы каждого этапа и размер свободного места на диске - это помогает лучше планировать ночной рендеринг (я вызываю этот скрипт для нескольких файлов из батника и ложусь спать).

Для скрипта нужен VirtualDub (у меня 1.10.4), Deshaker plugin (3.1), ffdshow plugin, Lagarith loseless codec plugin. Также отдельно нужен AviSynth (2.58) c запущенным frameserver.

Всего скрипт состоит из 1 батника и 5 скриптов для vdub’а. Главный Mobius.deshake.cmd, его и надо запускать с 5-мя параметрами:

1 - имя файла с настройками;
2 - исходный MP4-файл;
3 - путь без \ на конце для сохранения результатов и логов;
4 - номер начального кадра (используйте VirtualDub чтобы выбрать его);
5 - номер завершающего кадра;

Пример:

call Mobius.deshake.cmd Mobius1.cmd C:\Capture\Mob\rec_0019.mp4 H:\Temp 1800 5436
call Mobius.deshake.cmd Mobius1.cmd C:\Capture\Mob\rec_0020.mp4 H:\Temp 0 5436
call Mobius.deshake.cmd Mobius1.cmd C:\Capture\Mob\rec_0021.mp4 H:\Temp 0 1100

Скрипты выложены на http://www.sourceforge.net: sourceforge.net/p/fpv-scripts/svn/HEAD/…/Mobius
Все настройки Deshaker’а в файле: Deshake.env.DEFAULT.cmd.
От него наследуется файл для Mobius: Deshake.env.DEFAULT.Mobius.cmd
Приведу пример наследующегося от него скрипта конфигурации Mobius1.cmd из примера выше.

rem Inherit default settings for Mobius;
call Deshake.env.DEFAULT.Mobius.cmd

rem 13. Motion smoothness - horizontal panning (-1..; default: 1000);
set ds_motion_smth_hor=5000

rem 14. Motion smoothness - vertical panning (-1..; default: 1000);
set ds_motion_smth_vert=5000

rem 15. Motion smoothness - rotation (-1..; default: 1000);
set ds_motion_smth_rot=5000

rem 16. Motion smoothness - zoom (-1..; default: 1000);
set ds_motion_smth_zoom=1000

rem 40. Max. correction limits - horizontal panning (1..; default: 15, decimals allowed);
set ds_corr_limit_hor=1

rem 41. Max. correction limits - vertical panning (1..; default: 15, decimals allowed);
set ds_corr_limit_vert=1

rem 42. Max. correction limits - rotation (1..; default: 5, decimals allowed);
set ds_corr_limit_rot=1

rem 46. Use previous and future frames to fill in borders - previous frames (0..; default: 30);
rem     (Only used if previous frames are enabled.)
set ds_prev_frames=3

rem 47. Use previous and future frames to fill in borders - future frames (0..; default: 30);
rem     (Only used if future frames are enabled.)
set ds_future_frames=3

rem 55. Soft borders - edge transition width. (0..; default: 10);
rem     (Only valid if using Soft borders.)
set ds_edge_width=5

set render_fdd=0
set render_lagarith=1
set remove_temp=1

Опции render_fdd и render_lagarith включают рендеринг результатирующего видео в ffdshow и lagarith.
Опция remove_temp позволяет отключить удаление временных файлов.

Еще есть полезный скрипт для Avisynth, который располагает два deshake’нутых видео рядом в верхней части экрана, а в нижней показывает расхождения каждого из них от необработаного видео.
Скрипт: sourceforge.net/p/fpv-scripts/svn/…/splitABC.avs

  • 2411
Comments
SovGVD

Здорово. Еще бы видео “до” и “после”

Covax

Респект Андрей!

Маныч

полезный скрипт для Avisynth, который располагает два deshake’нутых видео рядом в верхней части экрана, а в нижней показывает расхождения каждого из них от необработаного видео.

Где можно посмотреть пример? И для чего вообще это нужно?

Prikupets

Ну примера пока нет, можно получить свой, прогнав дешейкнутое видео и исходное через этот скрипт. Идея в том, что Avisynth одновременно читает несколько файлов + делает виртуальное видео из видео-различий этих файлов. Затем все эти видео объединяются в один виртуальный видео-поток и стримятся frame-server’ом. Для пользователя это выглядит так: открыватся AVS скрипт как обычный видеофайл (например, в Windows MediaPlayer, но лучше в VirtualDub - там есть навигация по frame’ам), и медленно и с тормозами воспроизводится 😃

По самому скрипту:

X=DirectShowSource(“C:\Capture\Mob\REC_0026.temp.AVI”).Trim(1100,1600).ConvertToYUY2().BilinearResize(960,540)
 Открывает AVI файл, конвертирует его в YUY colorspace (чтобы все видео были в одном внутреннем формате - важно для Stack-функций). Масштабирует быстро и некачественно в 1/4 кадра.

S1=Overlay(X, A, mode=“Difference”, pc_range=true)
 Слияет два видео в режиме вычитания. Результат S1 - разница между каждой точкой (точнее не знаю).

AB=StackHorizontal(A,B )
S12=StackHorizontal(S1,S2)
 Объединяет side-by-side клипы делая виртуальный клип той же высоты и двойной ширины.

StackVertical(AB,S12)
 Объединяет side-by-side клипы делая виртуальный клип той же ширины и двойной высоты.

Последний клип в скрипте возвращается как итоговый.

ADF

Очень круто! Работа основательная! До сих пор вспоминаю, как врукопашную приходится прыгать, чтобы подобрать настройки дешейкера. Два-три пристрелочных прогона - запросто приходилось делать…
Правда вряд ли вскоре смогу всем этим воспользоваться, давно уже видео не монтировал, но на заметку возьму.

PS: и еще вопрос - весь монтаж целиком в VD делается?

Prikupets

Не, я другие продвинутые программы использую 😃 В VD - мазохизм 😃

ADF

Ну, вот я засомневался, вдруг чего-то не знаю про VD 😃 Хотя было бы заманчиво всё в одной софтине делать.

DiscoMan
Prikupets;bt134900

Не, я другие продвинутые программы использую 😃 В VD - мазохизм 😃

А зачем стабилизировать видео в виртуал дабе? Как программа, это прошлый век. Им активно пользовались в начале 2000-х, когда особенно ничего лучше не было… Но сейчас зачем? Неужели какой-нибудь Премьер или Файнэл Кат встроенными средствами хуже стабилизируют?

Prikupets

Я сравнивал только с Sony Vegas и стабилизатором YouTube. Deshaker+VirtualDub лучше по результату и по богатству настроек.
Тут дело не в VirtualDub самом, а именно в Deshaker. VirtualDub - это просто автоматизируемая среда для его работы.
И еще: стабилизация обычно занимает прилично времени, если это не 1 файл, а больше десятка. И с помощью скриптов их можно поставить в очередь на стабилизацию на ночь, или пока сам на работе. А также можно стабилизировать 1 файл с разными настройками, чтобы потом выбрать лучший результат.