Веб разработка
Yesterday

Лучшая задача – которой просто нет

Как я чуть не построил YouTube ради одного превью

Периодически ловлю себя на желании запрограммировать очень красивую и интересную вещь, которая этому проекту вообще не нужна.

Я делал мобильное приложение, в котором можно загружать вертикальные видео 9:16 с телефона. Иногда видео получаются огромными, поэтому понадобилось фоновое сжатие через ffmpeg.

Появилась новая задача: сделать из видео превью 1:1. Простое вырезание изображения по центру может отрезать самое интересное. Да и какой вообще кадр из видео взять?

И тут начинается инженерный разгон. Раз уж у нас уже есть фоновая обработка видео, можно:

  • взять 5–10 кадров из разных моментов видео
  • выбрать лучший кадр
  • найти на нём главный объект с помощью алгоритмов или AI
  • подобрать оптимальный crop 1:1 вокруг этого объекта.

А ещё было бы хорошо добавить garbage collection для видео, которые загрузили, но так и не прикрепили к постам. Ну и resumable upload через TUS, чтобы большое видео можно было докачать после обрыва соединения.

И вот вместо маленькой фичи у нас уже целый pipeline обработки видео с несколькими асинхронными процессами: загрузкой через TUS, сжатием, извлечением и анализом кадров, smart crop'ом и сборкой мусора.

Которые ещё чёрт знает как дебажить, мониторить и покрывать тестами.

При том, что загрузка видео для приложения вообще не главная фича.

Через день раздумий я решил проблему гораздо проще: сделаем отдельное поле для превью видео, а выбор кадра и crop отдадим пользователю.

Иногда лучший алгоритм — тот, который не пришлось писать.