Как превратить историю перемещений Google в плавное видео маршрутов
Недавно наткнулся на занятный репозиторий: google-timeline-visualizer. Проект берет сырой экспорт истории геолокации из Google Maps (Timeline.json) и собирает из него анимированное MP4-видео с картой ваших поездок за выбранный период.

Google пару лет назад начал постепенно переносить хронологию перемещений из облака на сами устройства пользователей. Теперь эти данные лежат локально в виде громоздких JSON-файлов со сложной структурой координат, сегментов и меток активностей. Автор проекта сначала написал для себя скрипт на Python, а затем перенес логику в нативное приложение на Kotlin для Android и веб-версию для iOS.

Что умеет утилита
Основная задача утилиты простая: превратить сухие точки геолокации в приятную анимацию, которую не стыдно выложить в соцсети или сохранить на память об отпуске.
Вот интересные решения внутри:
- Фильтрация шума GPS. Если телефон на секунду потерял спутники и отправил вас в соседний город, алгоритм отсекает такие резкие скачки туда-обратно и не ломает общую линию пути.
- Интерполяция перелетов. Длинные перелеты между континентами сглаживаются по дуге большого круга. Камера плавно летит за маркером по геодезической линии, а не перескакивает телепортом из точки А в точку Б.
- Плавное слежение камеры. При ежедневных поездках по городу маркер может немного гулять внутри фиксированной зоны экрана, и только потом карта начинает плавно двигаться за ним. Это избавляет видео от неприятной тряски на светофорах и пробках.
- Гибкие настройки рендера. Можно задать хронометраж от 10 до 300 секунд, выбрать вертикальный формат 1080×1920 для мобильных историй или классический горизонтальный 1080p.
Как запустить на десктопе
Изначально проект развивался как Python-скрипт с использованием FFmpeg для склейки тайлов и кадров. Десктопный вариант работает и сейчас.
Для запуска нужен Python 3.9+ и установленный в системе FFmpeg:
python -m pip install -r requirements.txt
python visualizer.py --input Timeline.json --year 2025 --camera-movement steady \
--long-trip-compression balanced --output my_trip_2025.mp4
Скрипт поддерживает разные форматы координат: стандартные массивы, структуру semanticSegments, E7-координаты и строки с префиксами geo:.
Мобильные клиенты и веб-версия
Если не хочется возиться с терминалом, есть два готовых варианта:
- Android. Готовый APK лежит в релизах репозитория. Приложение написано на Kotlin, рендерит видео прямо на процессоре телефона и складывает готовые ролики в системную папку
Movies. - iPhone. Работает через веб-интерфейс в Safari. Для кодирования задействуется аппаратный энкодер H.264 в браузере.
Для сборки Android-проекта с нуля понадобятся JDK 17 и Android SDK 36:
./gradlew test lint assembleGithubDebug assemblePlayDebug
python -m pip install -r requirements-dev.txt
python -m pytest
Вопрос приватности
Геолокация — штука чувствительная, поэтому автор сделал рендеринг строго локальным. Никаких авторизаций через Google-аккаунт или отправки JSON на сторонние сервера здесь нет.
Единственное сетевое взаимодействие — это подгрузка растровых тайлов карты из сервиса CARTO на базе OpenStreetMap. Перед загрузкой первой карты приложение прямо предупреждает об этих сетевых запросах.
Кому пригодится
Проект будет интересен тем, кто любит подводить итоги года и визуализировать свои поездки. Также исходники стоит посмотреть мобильным разработчикам: в кодовой базе наглядно показано, как организовать рендеринг тайловых карт и видеопотока без тяжелых внешних библиотек.
