Лучшая задача – которой просто нет
Как я чуть не построил YouTube ради одного превью
Периодически ловлю себя на желании запрограммировать очень красивую и интересную вещь, которая этому проекту вообще не нужна.
Я делал мобильное приложение, в котором можно загружать вертикальные видео 9:16 с телефона. Иногда видео получаются огромными, поэтому понадобилось фоновое сжатие через ffmpeg.
Появилась новая задача: сделать из видео превью 1:1. Простое вырезание изображения по центру может отрезать самое интересное. Да и какой вообще кадр из видео взять?
И тут начинается инженерный разгон. Раз уж у нас уже есть фоновая обработка видео, можно:
- взять 5–10 кадров из разных моментов видео
- выбрать лучший кадр
- найти на нём главный объект с помощью алгоритмов или AI
- подобрать оптимальный crop 1:1 вокруг этого объекта.
А ещё было бы хорошо добавить garbage collection для видео, которые загрузили, но так и не прикрепили к постам. Ну и resumable upload через TUS, чтобы большое видео можно было докачать после обрыва соединения.
И вот вместо маленькой фичи у нас уже целый pipeline обработки видео с несколькими асинхронными процессами: загрузкой через TUS, сжатием, извлечением и анализом кадров, smart crop'ом и сборкой мусора.
Которые ещё чёрт знает как дебажить, мониторить и покрывать тестами.
При том, что загрузка видео для приложения вообще не главная фича.
Через день раздумий я решил проблему гораздо проще: сделаем отдельное поле для превью видео, а выбор кадра и crop отдадим пользователю.