vibecoded
#019 ·

Волнорез

mp3 в вертикальное видео с волной, обложкой и субтитрами — одной командой

собран за 1 вечер·Claude CodeGoFFmpegwhisper.cpp
Открыть продукт ↗
Вертикальный кадр ролика: круглая обложка трека сверху, под ней анимированная звуковая волна, внизу субтитры с подсветкой произносимого слова

Из подкастового mp3 делает вертикальный ролик 1080×1920 для сторис и анонсов: круглая обложка, анимированная звуковая волна и субтитры с подсветкой произносимого слова. Один вызов из терминала, один mp4 на выходе — без монтажной программы и ручной раскадровки.

Зачем это

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

Как устроено

Транскрибирует дорожку через whisper.cpp с покадровым таймингом слов, кладёт волну через ffmpeg-фильтры showwaves и geq поверх круглой обложки, поджигает субтитры через subtitles-фильтр с libass — активное слово подсвечивается акцентным цветом в момент произнесения. Перед запуском проверяет, что у ffmpeg есть нужные фильтры и кодеки, и называет точную нехватку, если чего-то нет. Рендерит во временный файл рядом с целевым и переименовывает его в финальный только после проверки через ffprobe — прерывание на середине не портит и не оставляет обрубленный старый ролик.

Ограничения

Модель whisper.cpp и сам whisper-cli нужно поставить отдельно — не бандлит и не скачивает их. Стоковый ffmpeg из Homebrew на macOS собирается без libass и без фильтра subtitles — нужен ffmpeg-full. Обложку берёт из embedded-арта mp3 или отдельным флагом; без того и другого не запускается. Один файл за один вызов, очереди и пакетной обработки нет.

заметка куратора

Публикация ролика продумана как транзакция: рендер идёт во временный файл рядом с целевым, публикуется переименованием только после верификации через ffprobe, а прерывание на середине оставляет прежний рабочий mp4 нетронутым. Отдельно порадовал точечный диагноз — вместо общей ошибки ffmpeg инструмент называет именно недостающий фильтр или кодек.

автор · @artps
для автора · бейдж на ваш сайт
запущено на vibecoded.ru
<a href="https://vibecoded.ru/products/volnorez">
  <img src="https://vibecoded.ru/badge.svg" alt="запущено на vibecoded.ru" width="200" height="44">
</a>

Похожие запуски