Astra SmartVideoConverter
Как я создал Astra SmartVideoConverter
История разработки от первой идеи до финальной версии 2.01.2
С чего всё началось
У меня была простая проблема: после каждой съёмки накапливались сотни гигабайт MOV-файлов с камеры и iPhone. Они занимали место, медленно копировались, а для монтажа и хранения нужен был более компактный формат.
Казалось бы — открой FFmpeg, напиши команду, запусти. Но когда файлов 300, а ты каждый раз забываешь ключи и параметры... хочется чего-то более человеческого.
Так родилась идея: сделать простую программу с кнопками, которая сама всё сделает.
Эта программа целиком и полностью реализована с помощью нейросетей. Сам я не программист и не напишу ни строчки кода, я не знаю ни одного языка программирования. Все это результат "вайбкодинга".
Версия 1.0 — «Оно работает!»
Первая версия была максимально простой: окошко на Python с tkinter, выбор папки, одна кнопка «Конвертировать». Под капотом — вызов FFmpeg через subprocess.
Оно работало! Но медленно. Очень медленно. Пока процессор мучился над одним файлом, я успевал сходить за кофе, пообедать и ещё раз за кофе.
Тут я вспомнил: у меня же есть видеокарта! RTX 3070 простаивает, пока CPU страдает.
GPU-ускорение — первое «вау!»
Добавил поддержку NVIDIA NVENC. Один параметр в команде FFmpeg — и конвертация ускорилась в 6 раз. Вместо 8 минут на файл — меньше полутора.
Это был тот самый момент, когда понимаешь: программа действительно полезная. Добавил Intel Quick Sync и AMD AMF для совместимости с другими видеокартами.
Smart Mix Mode — используем всё
Следующая мысль была очевидной: а что если GPU и CPU будут работать одновременно? Короткие файлы — на процессор, длинные — на видеокарту.
Реализовал. Ещё +45% к скорости. 8 файлов конвертируются параллельно: 4 на GPU, 4 на CPU.
В этот момент жена спросила: «А можно подключить мой ноутбук, чтобы тоже помогал?» =)
Network Mode — безумная идея, которая сработала
Идея сетевой конвертации казалась избыточной. Зачем? У кого дома несколько компьютеров, которые могут параллельно конвертировать?
Оказалось — у меня. И у знакомых видеографов. И у продакшн-студий, где стоят 5-10 рабочих станций.
Архитектура: один компьютер — Master (раздаёт задачи), остальные — Workers (выполняют). Общая сетевая папка для файлов. REST API на Flask для координации. Это напоминает сетевой рендер в 3dsmax например.
Две недели отладки. Утечки соединений SQLite. Race conditions в статистике. Проблемы с сетевыми дисками в Windows (subprocess не видит mapped drives!). Таймауты, retry-логика, heartbeat-механизм...
Но в итоге: 2 компьютера = 2× быстрее. 4 компьютера = 4× быстрее. Линейное масштабирование!
Еще одна фича - Queue Manager — не терять прогресс
Когда работаешь с сотнями файлов, иногда нужно выключить компьютер посреди конвертации. Или программа упадёт. Или нужно продолжить завтра.
Queue Manager позволяет сохранить очередь в файл .asvc со всеми настройками и статусами файлов. Загрузил на следующий день — и продолжил с того же места. Даже если программа упала — прогресс сохранился.
Мелочи, которые важны
По пути добавилось много «мелочей»:
• Lazy loading списка файлов — программа не зависает на 10,000 файлах
• Сохранение метаданных — дата съёмки остаётся правильной
• Undo для удалённых файлов — случайно кликнул? Ctrl+Z!
• Сохранение структуры каталогов — файлы с одинаковыми именами не конфликтуют
• Тёмная тема — работать ночью не больно глазам
• Конвертация Slow-Motion — 240fps автоматически становится 30fps с замедлением
• Двойной клик на файле в списке файлов до конвертации – открывает исходник в видеоплеере.
• Двойной клик на файле в списке файлов после конвертации – открывает исходник в видеоплеере.
• Можно смотреть результирующие файлы прямо во время работы конвертера.
Версия 2.01.2 — финал?
Сейчас программа делает всё, что мне нужно. И даже больше.
Конечно, идеи для улучшений ещё есть, но это уже следующая история.
А пока — программа работает. Тысячи файлов конвертируются быстро. Несколько компьютеров помогают друг другу. И никакого ручного ввода команд в консоль.
Спасибо за внимание.
Миссия выполнена.
e.ov
Январь 2026