На 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 - номер завершающего кадра;
Скрипты выложены на 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
Comments
Здорово. Еще бы видео “до” и “после”
Респект Андрей!
полезный скрипт для Avisynth, который располагает два deshake’нутых видео рядом в верхней части экрана, а в нижней показывает расхождения каждого из них от необработаного видео.
Где можно посмотреть пример? И для чего вообще это нужно?
Ну примера пока нет, можно получить свой, прогнав дешейкнутое видео и исходное через этот скрипт. Идея в том, что 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 клипы делая виртуальный клип той же ширины и двойной высоты.
Последний клип в скрипте возвращается как итоговый.
Очень круто! Работа основательная! До сих пор вспоминаю, как врукопашную приходится прыгать, чтобы подобрать настройки дешейкера. Два-три пристрелочных прогона - запросто приходилось делать…
Правда вряд ли вскоре смогу всем этим воспользоваться, давно уже видео не монтировал, но на заметку возьму.
PS: и еще вопрос - весь монтаж целиком в VD делается?
Не, я другие продвинутые программы использую 😃 В VD - мазохизм 😃
Ну, вот я засомневался, вдруг чего-то не знаю про VD 😃 Хотя было бы заманчиво всё в одной софтине делать.
Не, я другие продвинутые программы использую 😃 В VD - мазохизм 😃
А зачем стабилизировать видео в виртуал дабе? Как программа, это прошлый век. Им активно пользовались в начале 2000-х, когда особенно ничего лучше не было… Но сейчас зачем? Неужели какой-нибудь Премьер или Файнэл Кат встроенными средствами хуже стабилизируют?
Я сравнивал только с Sony Vegas и стабилизатором YouTube. Deshaker+VirtualDub лучше по результату и по богатству настроек.
Тут дело не в VirtualDub самом, а именно в Deshaker. VirtualDub - это просто автоматизируемая среда для его работы.
И еще: стабилизация обычно занимает прилично времени, если это не 1 файл, а больше десятка. И с помощью скриптов их можно поставить в очередь на стабилизацию на ночь, или пока сам на работе. А также можно стабилизировать 1 файл с разными настройками, чтобы потом выбрать лучший результат.
{"assets_hash":"a8b26fa7f6e768b07a72c8c9aadb9422","page_data":{"users":{"3ff69d1e3df95500777955a3":{"_id":"3ff69d1e3df95500777955a3","hid":2659,"name":"ADF","nick":"ADF","avatar_id":null,"css":""},"41b8a4ac3df9550077792e83":{"_id":"41b8a4ac3df9550077792e83","hid":5271,"name":"Prikupets","nick":"Prikupets","avatar_id":null,"css":""},"4cc71da73df955007775ab86":{"_id":"4cc71da73df955007775ab86","hid":73930,"name":"Маныч","nick":"Маныч","avatar_id":null,"css":""},"4d2ed4283df9550077757835":{"_id":"4d2ed4283df9550077757835","hid":78182,"name":"Covax","nick":"Covax","avatar_id":null,"css":""},"4d4325cb3df9550077756c92":{"_id":"4d4325cb3df9550077756c92","hid":79585,"name":"SovGVD","nick":"SovGVD","avatar_id":null,"css":""},"51924fc73df95500777369c0":{"_id":"51924fc73df95500777369c0","hid":153258,"name":"DiscoMan","nick":"DiscoMan","avatar_id":null,"css":""}},"settings":{"blogs_can_create":false,"blogs_mod_can_delete":false,"blogs_mod_can_hard_delete":false,"blogs_mod_can_add_infractions":false,"can_report_abuse":false,"can_vote":false,"can_see_ip":false,"blogs_edit_comments_max_time":30,"blogs_show_ignored":false,"blogs_reply_old_comment_threshold":30,"votes_add_max_time":168},"entry":{"_id":"55207f959970730077111ebd","hid":20160,"title":"Скриптовый монстр для обработки видео (Deshaking)","html":"<p>На 250-коптере у меня стоит камера Mobius Wide Lens, которой я снимаю в 1080p 30Hz (29,970 Hz). Формат записи - MP4.</p>\n<p>Я сделал титанический скрипт для автоматического deshaking’а ряда клипов с помощью VirtualDub+Deshaker.</p>\n<p>Настройки процесса (а их много) подключаются через отдельные файлы с возможностью наследования и перекрытия. Например, есть настройки по-умолчанию, от них наследуется настройка для Mobius и перекрываются десяток настроек, специфичных для этой камеры. От настроек для Mobius наследуется еще более специфичный файл, в котором перекрывается 1-2 настройки.</p>\n<p>Обработка идет с вырезанием нужного участка (первый и последний фрейм задаются в параметрах) и выполнением deshaking’а с рендерингом в FFDshow для монтажа (маленький размер файла и плохое качество) и Lagarith для финального рендеринга (большой размер, без потери качества). FFD иногда создает файл с мусором, так что рендеринг в него можно отключить. Просматривается Lagarith быстро в VirtualDub и Windows Media Player, но не в VLC.</p>\n<p>Также пишется лог, в котором фиксируется время работы каждого этапа и размер свободного места на диске - это помогает лучше планировать ночной рендеринг (я вызываю этот скрипт для нескольких файлов из батника и ложусь спать).</p>\n<p>Для скрипта нужен VirtualDub (у меня 1.10.4), Deshaker plugin (3.1), ffdshow plugin, Lagarith loseless codec plugin. Также отдельно нужен AviSynth (2.58) c запущенным frameserver.</p>\n<!--cut-->\n<p>Всего скрипт состоит из 1 батника и 5 скриптов для vdub’а. Главный Mobius.deshake.cmd, его и надо запускать с 5-мя параметрами:</p>\n<p>1 - имя файла с настройками;<br>\n2 - исходный MP4-файл;<br>\n3 - путь без \\ на конце для сохранения результатов и логов;<br>\n4 - номер начального кадра (используйте VirtualDub чтобы выбрать его);<br>\n5 - номер завершающего кадра;</p>\n<p>Пример:</p>\n<pre class=\"hljs\"><code>call Mobius.deshake.cmd Mobius1.cmd C:\\Capture\\Mob\\rec_0019.mp4 H:\\Temp 1800 5436\ncall Mobius.deshake.cmd Mobius1.cmd C:\\Capture\\Mob\\rec_0020.mp4 H:\\Temp 0 5436\ncall Mobius.deshake.cmd Mobius1.cmd C:\\Capture\\Mob\\rec_0021.mp4 H:\\Temp 0 1100\n</code></pre>\n<p>Скрипты выложены на <a href=\"http://www.sourceforge.net:\" class=\"link link-ext\" data-nd-link-orig=\"http://www.sourceforge.net:\" target=\"_blank\" rel=\"nofollow noopener\">http://www.sourceforge.net:</a> <strong data-nd-pair-src=\"**\"><a href=\"https://sourceforge.net/p/fpv-scripts/svn/HEAD/tree/trunk/Deshaking/Mobius\" class=\"link link-ext link-auto\" data-nd-link-type=\"autolink\" data-nd-link-orig=\"https://sourceforge.net/p/fpv-scripts/svn/HEAD/tree/trunk/Deshaking/Mobius\" target=\"_blank\" rel=\"nofollow noopener\">sourceforge.net/p/fpv-scripts/svn/HEAD/…/Mobius</a></strong><br>\nВсе настройки Deshaker’а в файле: <strong data-nd-pair-src=\"**\">Deshake.env.DEFAULT.cmd</strong>.<br>\nОт него наследуется файл для Mobius: <strong data-nd-pair-src=\"**\">Deshake.env.DEFAULT.Mobius.cmd</strong><br>\nПриведу пример наследующегося от него скрипта конфигурации <strong data-nd-pair-src=\"**\">Mobius1.cmd</strong> из примера выше.</p>\n<pre class=\"hljs\"><code>rem Inherit default settings for Mobius;\ncall Deshake.env.DEFAULT.Mobius.cmd\n\nrem 13. Motion smoothness - horizontal panning (-1..; default: 1000);\nset ds_motion_smth_hor=5000\n\nrem 14. Motion smoothness - vertical panning (-1..; default: 1000);\nset ds_motion_smth_vert=5000\n\nrem 15. Motion smoothness - rotation (-1..; default: 1000);\nset ds_motion_smth_rot=5000\n\nrem 16. Motion smoothness - zoom (-1..; default: 1000);\nset ds_motion_smth_zoom=1000\n\nrem 40. Max. correction limits - horizontal panning (1..; default: 15, decimals allowed);\nset ds_corr_limit_hor=1\n\nrem 41. Max. correction limits - vertical panning (1..; default: 15, decimals allowed);\nset ds_corr_limit_vert=1\n\nrem 42. Max. correction limits - rotation (1..; default: 5, decimals allowed);\nset ds_corr_limit_rot=1\n\nrem 46. Use previous and future frames to fill in borders - previous frames (0..; default: 30);\nrem (Only used if previous frames are enabled.)\nset ds_prev_frames=3\n\nrem 47. Use previous and future frames to fill in borders - future frames (0..; default: 30);\nrem (Only used if future frames are enabled.)\nset ds_future_frames=3\n\nrem 55. Soft borders - edge transition width. (0..; default: 10);\nrem (Only valid if using Soft borders.)\nset ds_edge_width=5\n\nset render_fdd=0\nset render_lagarith=1\nset remove_temp=1\n</code></pre>\n<p>Опции <strong data-nd-pair-src=\"**\">render_fdd</strong> и <strong data-nd-pair-src=\"**\">render_lagarith</strong> включают рендеринг результатирующего видео в ffdshow и lagarith.<br>\nОпция <strong data-nd-pair-src=\"**\">remove_temp</strong> позволяет отключить удаление временных файлов.</p>\n<p>Еще есть <strong data-nd-pair-src=\"**\">полезный скрипт</strong> для Avisynth, который располагает два deshake’нутых видео рядом в верхней части экрана, а в нижней показывает расхождения каждого из них от необработаного видео.<br>\nСкрипт: <strong data-nd-pair-src=\"**\"><a href=\"https://sourceforge.net/p/fpv-scripts/svn/HEAD/tree/trunk/AviSynth/splitABC.avs\" class=\"link link-ext link-auto\" data-nd-link-type=\"linkify\" data-nd-link-orig=\"https://sourceforge.net/p/fpv-scripts/svn/HEAD/tree/trunk/AviSynth/splitABC.avs\" target=\"_blank\" rel=\"nofollow noopener\">sourceforge.net/p/fpv-scripts/svn/…/splitABC.avs</a></strong></p>\n","user":"41b8a4ac3df9550077792e83","ts":"2015-04-05T00:19:33.000Z","st":1,"cache":{"comment_count":9,"last_comment":"55239e83997073007712dc12","last_comment_hid":9,"last_ts":"2015-04-07T09:08:19.000Z","last_user":"41b8a4ac3df9550077792e83"},"views":2415,"bookmarks":0,"votes":0},"subscription":null},"locale":"en-US","user_id":"000000000000000000000000","user_hid":0,"user_name":"","user_nick":"","user_avatar":null,"is_member":false,"settings":{"can_access_acp":false,"can_use_dialogs":false,"hide_heavy_content":false},"unread_dialogs":false,"footer":{"rules":{"to":"common.rules"},"contacts":{"to":"rco-nodeca.contacts"}},"navbar":{"tracker":{"to":"users.tracker","autoselect":false,"priority":10},"forum":{"to":"forum.index"},"blogs":{"to":"blogs.index"},"clubs":{"to":"clubs.index"},"market":{"to":"market.index.buy"}},"recaptcha":{"public_key":"6LcyTs0dAAAAADW_1wxPfl0IHuXxBG7vMSSX26Z4"},"layout":"common.layout"}