← все статьи

Sep, первые три недели: всё считает само устройство

Двадцать первый день разработки Sep. Это наше собственное приложение: оно убирает шум, разводит голоса, вырезает одного говорящего и монтирует видео — прямо на устройстве, без сервера и без интернета.

Дневник проекта мы ведём здесь, в блоге. Эта запись — обзор: что получилось за три недели и как оно устроено.

Что это

Звук. Приложение находит в записи людей и показывает, кто и когда говорит. Шум убирается, голос отделяется от фона, а одного человека можно убрать из записи целиком — даже там, где он говорит одновременно с другими.

Видео. Ролики и звук ложатся на общий таймлайн: режутся, склеиваются, играют вместе. Поверх — надписи и картинки с ключевыми кадрами, у отрывков — скорость с плавными разгонами.

Медиатека. Проекты с тегами по папкам, вся система тегов — деревом. Между устройствами медиатеку переносит своё облако.

У проекта два правила:

  • Запись никуда не уходит. Вся обработка — на самом устройстве: телефон или ноутбук считает сам, нейросети работают без облака.
  • Оригинал не трогается. Любую правку можно отменить, а обрезанное — вернуть: исходник всегда лежит в проекте.

Приложением пользуются в основном с телефона, одной рукой. Поэтому всё частое делается нажатиями под большим пальцем, а клавиатура нужна, только чтобы назвать новое.

Медиатека: проекты по дням, отбор по тегам
Медиатека: проекты по дням, отбор по тегам
Редактор: плеер, таймлайн и спикеры
Редактор: плеер, таймлайн и спикеры
Теги по папкам: открыл папку, нажал тег
Теги по папкам: открыл папку, нажал тег

Каждый отрывок — со своей обработкой

Обработка привязана не к ролику, а к отрывку на таймлайне. Разрезали запись — и в одной части убран шум, в другой убран голос, третья звучит как записана.

Движок при этом считает только выбранный кусок, а не весь файл. На трёхминутном интервью это разница между секундами и минутами.



Три отрывка одной записи: в первом убран шум, второй как записан, в третьем убран журналист — спикеры справа только этого отрывка

Свой звуковой движок

Пока на таймлайне был один ролик, хватало системного плеера. Потом под видео легла музыка, рядом — второй голос, и плееры начали расходиться: у каждого свои часы.

Поэтому звук теперь играет свой движок на Rust: одни часы на все дорожки, сведение в реальном времени и ровно тот же звук в сохранённом файле.



Монтаж из четырёх роликов на общем таймлайне — играет сразу, без сборки



Скорость отрывка — по ключам, с плавным разгоном; голос не меняет высоту

Слои и ключевые кадры

Поверх видео — надписи и картинки, слоями на своих дорожках. Место, масштаб, поворот и прозрачность движутся по ключевым кадрам, как в After Effects: у каждого свойства свой секундомер, ключи видны на таймлайне полоской на свойство.

Между ключами — кривая. Есть заготовки, а можно взять две ручки и потянуть пальцем: вытянутая за рамку кривая даёт перелёт — надпись проскакивает место и возвращается.

Надпись въезжает сверху: ключи места и масштаба — полосками под слоем
Надпись въезжает сверху: ключи места и масштаба — полосками под слоем
Кривая перелёта — ручки тянутся пальцем
Кривая перелёта — ручки тянутся пальцем

Когда тегов сотни

Теги вложенные и лежат по папкам. Вся система видна деревом: под каждым тегом — проекты. Тег можно переименовать, перенести или склеить с соседним — сразу во всех проектах, а обязательные папки напоминают, что на проекте ещё не выбрано.



Все теги деревом, под каждым — проекты

Что ещё уже есть

  • Слежение за объектом — отмечаешь его на одном кадре, окно ведёт его через весь ролик.
  • Своё облако — хранилище, совместимое с S3: правка уходит туда сама, одинаковые файлы не грузятся дважды, на телефоне проект докачивается, когда понадобится.
  • Отмена всего — обрезка, найденные спикеры, переименование тега во всех проектах: журнал правок помнит и данные, и файлы.
  • Экран не гаснет, пока проект играет, — мелочь, без которой на телефоне не посмотреть длинную запись.
Слои и ключи — на телефоне
Слои и ключи — на телефоне
То же дерево тегов — на телефоне
То же дерево тегов — на телефоне

Цифры

За три недели — 106 выпусков, 382 автопроверки, 15,3 тысячи строк движка на Rust и 42,6 тысячи строк приложения на Flutter. Работает на Mac и Android.

Экраны в этой записи приложение сняло само: демо-медиатека приходит в него из облака, а заводит её тоже Sep — проекты, теги, спикеров и монтаж. В ней видео NASA и «Лунный свет» Дебюсси в общественном достоянии; материалы NASA не означают, что агентство одобряет продукт.

Что дальше

Публичный релиз готовится — пока приложение проходит обкатку на настоящей медиатеке.

Следующий шаг — тяжёлая обработка на домашнем сервере: редактируешь с телефона, а разделение голосов считает сервер. Первый замер честный: 18-ядерный Xeon на одной задаче вдвое медленнее M4 Pro, зато шесть задач параллельно проходят по 23 секунды на файл — столько же, сколько одна у ноутбука. Об этом — в следующих записях.