
Пет-проект выходного дня, который вырос в две программы с открытым кодом.
Задача звучала просто: получить запись вебинара MTS Link одним файлом. Готовые решения на GitHub нашлись, но одно ради звука качало видео целиком, другое собирало общий экран часами. Мне нужен был звук, и быстро.
🧩 Почему это не «скачать файл»
Запись вебинара это не один ролик. У каждого участника своя дорожка со своим временем начала: в тестовой записи их 18, и звучат они одновременно. Склеить их подряд нельзя, их нужно свести на общей шкале времени, как звукорежиссёр сводит микрофоны.
Дальше инженерия, знакомая по торговым системам:
• качаются только звуковые куски, видео по запросу;
• сведение и кодирование идут прямо во время загрузки;
• кусок, которого ждёт микшер, запрашивается вне очереди;
• скачанное кэшируется, и другой формат или отрезок той же записи берётся с диска.
Ъ
⚡️ Цифры
85 минут в MP3 за 1 мин 28 с с пустого кэша. Это ночью, днём сервер нагружен и выходит от 2 до 2,5 минут. MP3 плюс видео всех участников за 1 мин 40 с.
В той же серии замеров открытые аналоги справились за 4 и 29 минут, третий не закончил за полчаса. Оговорка: двое из них решают другую задачу и собирают одно общее видео с перекодированием.
🛠 Две версии
• webinar-downloader: первая, на Python. Дашборд в браузере, докачка после обрыва, видео «все камеры на одном экране».
• webinarip: быстрая, на Rust. Один файл около 4 МБ без зависимостей, macOS, Linux и Windows, веб-интерфейс, отдельные дорожки участников и проект для монтажа.
🧭 Как принимал решения
Вёл проект по той же системе, что и канал: каждое решение с замером и датой, критерий остановки записан до эксперимента. Пример: HTTP/2 казался очевидным ускорением, а на замере оказался в 7,7 раза медленнее. Идея ушла в архив вместе с цифрой.
🤝 Этика
Только для своих записей или с разрешения организатора. У числа соединений жёсткий потолок, а когда сервер сигналит о перегрузке, программа сбавляет темп. Ключ к закрытой записи живёт только в памяти и на диск не пишется. Проект независимый и с MTS Link не связан.
👉 Дальше
Стенограмма с именами спикеров. Раз у каждого участника своя дорожка, понятно, кто говорит, и угадывать по голосу не нужно. Распознавание локально на Mac.
Код открыт, лицензия MIT. Если работаете с вебинарами, попробуйте и напишите, что сломалось 🙂
#Стройка@nilysenok


