Подробный рассказ о том, как было снят главный проект этого года -
виртуальное автомобильное путешествие «Москва - Владивосток» Набор исходных компонентов по порядку слева направо:
• Жесткий диск Seagate 2,5" 880 Гб
• Держатель-присоска на стекло автомобиля для камеры
• Камера Kodak Playsport формата FullHD
• Карты памяти SD 32 и 16 Гб
• USB-адаптер в прикуриватель автомобиля
• USB-кабель для питания камеры
Запись видео
Видео записывалось в формате 720p (1280x720x30 fps), в таком разрешении 1 час видео занимает около 4 Гб. Итого, две карты памяти могли вместить не менее 12 часов видео. Этого, более чем достаточно на один световой день. Камера может вести непрерывную съемку и самостоятельно разделять видеофайлы на сегменты по 4 Гб (лимит на размер файла в FAT32). Используемый кодек для видео - H.264.
Камера имеет встроенный аккумулятор, заряда которого хватает на запись 1,5-2 часов видео, но в нашем случае камера постоянно питалась через Micro USB разъем от внешнего источника питания. Здесь имел место быть небольшой недостаток камеры - при прерывании внешнего питания, запись видео останавливалась. К счастью, на немецких автомобилях (в отличие от японских) питание на разъеме прикуривателя остается даже при выключении зажигания, поэтому проблем не возникло.
Ежедневная запись делалась очень просто. Камера снималась вместе с держателем только в случаях покидания автомобиля, во избежание неприятных ситуаций в виде разбитых стекол. Все остальное время в течение дня велась непрерывная запись, включая все непродолжительные остановки. Особенности конструкции держателя-присоски таковы, что камеру можно закрепить только в перевернутом виде, но на дальнейшее развитие событий это практически не влияло.
Вечером первого дня выяснилась одна неприятная особенность. Несмотря на то, что SD-карты имели Class 10 и Class 6 соответственно, на переписывание данных требовалось от 30 до 60 минут ежедневно. Поскольку экспедиция постоянно двигалась на Восток и почти каждый день из-за смены часовых поясов сутки были короче на один час, то этот драгоценный час времени на сон был очень важен.
Таким образом ежедневно я переписывал от 8 до 48 гигабайт видео на внешний жесткий диск. Под конец экспедиции я получил 650 гигабайт отснятого материала продолжительностью около 160 часов.
Запись GPS-трека
На машину был установлен GPS/GSM-трекер (расскажу о нем отдельно) с установленной сим-картой, который пытался в реальном времени передавать координаты нашего местоположения на сервер. Как вы помните, в течение экспедиции можно было следить в онлайне за нашими перемещениями. Особенность трекера в том, что он записывал (а точнее говоря, передавал на сервер) точки с нашим местоположением с нелинейными интервалами. В движении интервал составлял от 2 до 20 секунд, в режиме простоя - 1 раз в 5 минут.
В онлайне трекер обслуживался компанией Gurtam, создавшей программный комплекс Wialon. Мы пользовались их бесплатным (для индивидуального, некоммерческого использования) сервисом -
http://gps-trace.com/. Трек был сохранен с сервера в простейшей NMEA последовательности, включающей минимальный набор данных RMC, необходимых для определения местоположения: координаты и точное время.
Обработка полученного результата
Работа была разделена на два этапа. На первом этапе происходила сборка последовательностей дорожного видео. А на втором этапе происходило наложение анимированного gps-трека на уже подготовленное видео.
Монтаж и сборка производилась в Adobe Premiere Pro. Видео обрабатывалось последовательно по дням экспедиции. В первую очередь обрезались начальные и конечные участки записи, если в них не было необходимости. Затем производилась подгонка точек записи, в дни с частыми остановками. Было принято решение, некоторые моменты движения в крупных городах исключить из видео. На этот этап потребовалось около двух недель неспешной работы. При этом в голове я держал все ключевые моменты между эпизодами, которые будут критичны на следующем этапе.
Скорость воспроизведения видео подбиралась экспериментально, учитывая опыт прошлого дорожного видео, с которым я экспериментировал еще летом. Было выбрано ускорение в 24 раза, как наиболее оптимальное по соотношению скорость/время просмотра. Конечное видео в результате получилось всего на 7 часов. Если делать воспроизведение медленнее, то на просмотр потребовалось бы еще больше времени. Некоторые, короткие, дни ускорены всего в 12 раз. Кроме ускорения, на этапе монтажа для видео устанавливался режим Frame Blend, для сглаживания переходов между кадрами.
Параллельно с первичной сборкой видео я обрабатывал имеющийся GPS-трек. Во-первых трек был разделен по дням. Во-вторых с ним производилась очень долгая работа по коррекции ошибочных значений. В местах, где связь была неустойчивой было несколько сбоев с определением координат, один из которых вообще определил местоположение в 500 км от реального. Я делал пошаговое редактирование трека, попутно отслеживая, чтобы скорость движения практически совпадала с реальностью (в случае, если одна из точек имела ошибочные координаты, то в ней скорость движения считалась космической, до сих пор в видео осталось несколько моментов с ошибочной скоростью 186 и 205 км/ч). Для этого я использовал программы TrailRunner и myTracks. Кроме этого, ввиду отсутствия в треке данных о высоте, они были подгружены из базы данных SRTM (база данных НАСА о высоте над уровнем моря в любой точке планеты с точностью 90 метров), с помощью он-лайн сервиса gpsvisualizer.com
При подготовке треков особенно важно было знать точки старта и финиша каждого дня (как я писал выше - некоторые лишние моменты вырезались из видео).
После этого начинается самое интересное. Почти день поисков в интернете показал, что казалось бы простейшей программы, которая может анимировать существующий GPS-трек в видео, практически не существует. В принципе, это возможно сделать с помощью Google Earth, загрузив туда трек и включив движение по нему. Запись видео будет доступна только в платной версии программы, но в принципе это решаемо с помощью программы захвата изображения с экрана в виде скриншотов. Но вот незадача - мне нужна анимация только маршрута, без лишнего фона, плюс необходим вывод данных о времени, пробеге и скорости.
Совершенно случайно я нахожу программу Particler (
http://gis4all.ru/soft/particler/), написанную Алексеем Макеевым. Фактически, это именно то, что мне нужно. Запускаю виртуальную машину (я работаю на Mac), устанавливаю фреймворк .NET и запускаю программу. Списываюсь с Алексеем и прошу немного доработать программу. Доработанная версия доступна для всех на указанном сайте.
В результате доработок и нескольких итераций с отладкой получается готовая программа, которая может сделать анимацию загруженного трека поверх «прозрачной» карты в виде PNG-последовательности файлов. Определена цветовая схема для визуализации, выбраны только нужные данные для визуализации (например, отказались от вывода высоты над уровнем моря в реальном времени).
И тут сталкиваемся с первой серьезной проблемой. Видеозапись у нас линейная, а трек записан нелинейно (визуализация делается по точкам трека: 1 точка = 1 кадр, а интервал между точками, как вы помните не постоянный). Получаемая PNG-последовательность неплохо отображает анимацию движения сама по себе, но синхронизировать данные с отснятым видео физически невозможно. Алексей дорабатывает программу таким образом, чтобы она могла сделать интерполяцию существующего GPS-трека и привела его к ежесекундному интервалу.
Теперь у меня есть интерполированные ежесекундные треки и я берусь за создание фоновых карт для каждого дня экспедиции. Файлы в формате PNG (с прозрачностью) подгружаются перед анимацией каждого дня экспедиции. Начинается долгий процесс рендера PNG-последовательностей файлов (на каждый день маршрута проходится от 10 до 60 тысяч файлов). Любая ошибка обнаруженная на стадии наложения анимации на видео приведет к необходимости начинать все заново. Проверяю все несколько раз.
Затем полученные PNG-последовательности анимации трека загружаются в Adobe Premiere Pro. Для каждого эпизода видео вручную устанавливаются начальные и конечные точки из анимации между непрерывными эпизодами в видео. Только в этом случае можно добится совпадения в выводе скорости с реальным видео. На этот этап ручной синхронизации уходит еще одна неделя. Погрешность с синхронизацией составляет +/- 5 секунд и в целом не особо критична. Чтобы этого избежать, нужно было записывать видео без остановок не снимая камеру в течение каждого дня.
После этого приступаю к рендеру смонтированного видео. Тут следует сразу отметить, что все видео заливалось на YouTube по одной простой причине. Vimeo, даже на платном аккаунте ограничивает загрузку не более 5 Гб в неделю, а у меня получилось 25 гигабайт видео, которые нужно было залить за пару дней и ждать полтора месяца в случае с Vimeo не вариант. При этом у YouTube есть ограничение на продолжительность одного видеофайла - не более 15 минут. Значит, на этапе рендера, в те дни, когда было много передвижений нужно разделить файл на две части.
Итого, после двух дней непрерывного рендера (iMac 27", Core2Duo 3 Ghz, 4 Gb) я получил 35 видеофайлов общим размером 25 гигабайт. Еще сутки уходят на загрузку видео на YouTube и ожидание пока оно будет обработано. Параллельно я рисую общую карту-схему маршрута с разбивкой по дням, пишу вступление и комментарии к каждому дню экспедиции и отбираю несколько альбомов для музыкального сопровождения. Все это отдается на верстку и через пару дней мы получаем ту самую страницу с виртуальным путешествием «Москва - Владивосток»:
http://www.apex.ru/apex/ru/expedition Проект дорожного видео я планирую развивать и дальше, но в любом случае я опередил Google Street View и Яндекс.Панорамы с «виртуализацией» дорог России.