Визуализация сгенерированной песни на коленке
Визуализация сгенерированной песни на коленке
Главный ответ
Если у агента уже есть MP3 от Trekopes/Suno/другого генератора, самый быстрый способ сделать визуализацию — собрать MP4 через ffmpeg: waveform, спектрограмма или обложка + аудиореактивная полоса.
Минимальный happy path:
ffmpeg -i song.mp3 \
-filter_complex "[0:a]showspectrum=s=1280x720:mode=combined:color=intensity:scale=log,format=yuv420p[v]" \
-map "[v]" -map 0:a \
-c:v libx264 -c:a aac -shortest visualizer.mp4
Результат: visualizer.mp4 — видео со звуком и движущейся спектрограммой, которое можно отправить в Telegram, вставить в лендинг или использовать как preview для песни.
Используйте эту страницу, если
- у вас есть
song.mp3и нужно быстро сделать видео; - нужна демка для Telegram/соцсетей без полноценного motion design;
- нужно дать другому агенту простой рецепт: «взял MP3 → отдал MP4»;
- хочется сделать несколько уровней качества: от одной команды до кастомного cyber/ASCII-визуализатора.
Что получится
Можно получить один из четырёх форматов:
- Waveform-видео — бегущая аудиоволна.
- Spectrum-видео — частотная спектрограмма, выглядит музыкальнее.
- Cover visualizer — обложка/фон + аудиореактивная полоса.
- Custom visualizer — Python/ASCII/киберпанк/частицы под бас, если нужен вау-эффект.
Предусловия
Минимально нужен:
ffmpeg -version
Если ffmpeg не установлен:
# Ubuntu/Debian
sudo apt-get update && sudo apt-get install -y ffmpeg
# macOS
brew install ffmpeg
Входной файл в примерах:
song.mp3
Выходной файл:
visualizer.mp4
Быстрый старт: спектрограмма за одну команду
ffmpeg -i song.mp3 \
-filter_complex "[0:a]showspectrum=s=1280x720:mode=combined:color=intensity:scale=log,format=yuv420p[v]" \
-map "[v]" -map 0:a \
-c:v libx264 -c:a aac -shortest visualizer.mp4
Проверьте:
ffprobe -hide_banner visualizer.mp4
Ожидаемый результат:
- есть video stream
h264; - есть audio stream
aac; - длительность примерно совпадает с исходным MP3;
- файл открывается в плеере и отправляется в Telegram как видео.
Recipe 1: простая waveform-линия
Используйте, если нужно максимально быстро и читаемо.
ffmpeg -i song.mp3 \
-filter_complex "[0:a]showwaves=s=1280x720:mode=line:colors=00ffcc,format=yuv420p[v]" \
-map "[v]" -map 0:a \
-c:v libx264 -c:a aac -shortest waveform.mp4
Что это даёт:
- минималистичная волна;
- маленький риск артефактов;
- хорошо подходит для черновика или быстрой отправки в чат.
Recipe 2: частотная спектрограмма
Используйте как default для «песня → визуализация».
ffmpeg -i song.mp3 \
-filter_complex "[0:a]showspectrum=s=1280x720:mode=combined:color=intensity:scale=log,format=yuv420p[v]" \
-map "[v]" -map 0:a \
-c:v libx264 -c:a aac -shortest spectrum.mp4
Что это даёт:
- движение частот по времени;
- цветовую динамику;
- более «музыкальный» вид, чем обычная волна.
Recipe 3: обложка + waveform снизу
Используйте, если есть cover.jpg или сгенерированная картинка для песни.
ffmpeg -loop 1 -i cover.jpg -i song.mp3 \
-filter_complex "[0:v]scale=1280:720:force_original_aspect_ratio=increase,crop=1280:720,format=rgba[bg];[1:a]showwaves=s=1280x160:mode=line:colors=00ffff,format=rgba[wave];[bg][wave]overlay=0:560,format=yuv420p[v]" \
-map "[v]" -map 1:a \
-c:v libx264 -c:a aac -shortest cover_visualizer.mp4
Ожидаемый результат:
- на фоне статичная обложка;
- снизу двигается waveform;
- звук сохранён;
- выглядит лучше для публикации, чем голая спектрограмма.
Recipe 4: вертикальный формат для Shorts/Reels/TikTok
ffmpeg -i song.mp3 \
-filter_complex "[0:a]showspectrum=s=1080x1920:mode=combined:color=intensity:scale=log,format=yuv420p[v]" \
-map "[v]" -map 0:a \
-c:v libx264 -c:a aac -shortest spectrum_vertical.mp4
Используйте, если результат пойдёт в мобильную ленту.
Recipe 5: 30-секундный teaser
Чтобы не рендерить всю песню, можно взять первые 30 секунд:
ffmpeg -t 30 -i song.mp3 \
-filter_complex "[0:a]showspectrum=s=1280x720:mode=combined:color=intensity:scale=log,format=yuv420p[v]" \
-map "[v]" -map 0:a \
-c:v libx264 -c:a aac -shortest teaser_30s.mp4
Или взять кусок с 45-й секунды:
ffmpeg -ss 45 -t 30 -i song.mp3 \
-filter_complex "[0:a]showspectrum=s=1280x720:mode=combined:color=intensity:scale=log,format=yuv420p[v]" \
-map "[v]" -map 0:a \
-c:v libx264 -c:a aac -shortest teaser_45_30s.mp4
Recipe 6: статичная картинка-спектрограмма
Если нужно не видео, а картинка для отчёта/обложки:
ffmpeg -i song.mp3 \
-lavfi "showspectrumpic=s=1920x1080:legend=disabled:scale=log" \
spectrogram.png
Ожидаемый результат:
spectrogram.png— статичная визуальная подпись песни;- удобно вставлять в отчёт, Trip2G-заметку или Telegram-пост.
Более красивый путь: Python-визуализатор
Когда одной команды мало, следующий уровень — небольшой Python-скрипт:
ffmpegдекодирует аудио;- Python считает громкость/частоты по кадрам;
Pillow/numpyрисуют фон, частицы, waveform, текст;ffmpegсобирает MP4 и добавляет исходный звук.
Идеи сцен:
- synthwave: сетка, неон, солнце, waveform снизу;
- terminal/ASCII: символы, glitch, бегущие строки, пульс под бас;
- Agent Garden: ростки/узлы/линии как сеть агентов, реагирующая на музыку;
- Trekopes mode: мемный техно-пёс, косточки/лапы/волны, glitch-лай.
Простой контракт для агента:
Input:
- song.mp3
- optional cover.jpg
- title
- style: synthwave / ascii / cyberpunk / minimal
Output:
- visualizer.mp4
- preview.png
Быстрый ASCII/cyberpunk вариант
Для Telegram хорошо работает короткий 30–60 секундный ASCII-визуализатор:
- чёрный или тёмный фон;
- символы
░▒▓█,01,<>,//,*,#; - пульсация размера/яркости от громкости;
- waveform или спектр снизу;
- название трека крупно в начале;
- glitch-переход на припеве.
Это уже не одна команда, но всё ещё «на коленке»: один Python-файл + ffmpeg.
Reference: полезные ffmpeg-фильтры
-
showwaves- Purpose: waveform по аудио.
- Good for: минималистичные визуализации.
- Example:
showwaves=s=1280x720:mode=line:colors=00ffcc.
-
showspectrum- Purpose: движущаяся частотная спектрограмма.
- Good for: музыкальный visualizer по умолчанию.
- Example:
showspectrum=s=1280x720:mode=combined:color=intensity:scale=log.
-
showspectrumpic- Purpose: статичная картинка спектра.
- Good for: отчёты, обложки, Trip2G-заметки.
- Example:
showspectrumpic=s=1920x1080:legend=disabled:scale=log.
-
overlay- Purpose: наложить waveform на обложку/фон.
- Good for: cover visualizer.
- Example:
[bg][wave]overlay=0:560.
-
scale,crop- Purpose: привести картинку к 16:9 или 9:16.
- Good for: обложка любого размера.
Troubleshooting
Видео есть, но Telegram плохо воспроизводит
Добавьте совместимый pixel format:
format=yuv420p
И кодек:
-c:v libx264 -c:a aac
Файл слишком большой
Добавьте CRF:
-crf 23 -preset veryfast
Пример:
ffmpeg -i song.mp3 \
-filter_complex "[0:a]showspectrum=s=1280x720:mode=combined:color=intensity:scale=log,format=yuv420p[v]" \
-map "[v]" -map 0:a \
-c:v libx264 -crf 23 -preset veryfast -c:a aac -shortest visualizer.mp4
Нужно быстрее
Сделайте teaser:
-t 30
или уменьшите размер:
s=854x480
Обложка растянулась
Используйте связку:
scale=1280:720:force_original_aspect_ratio=increase,crop=1280:720
Нужно не видео, а файл-картинка
Используйте showspectrumpic, не showspectrum.
Рекомендованный default для агентов
Если пользователь просто просит «сделай визуализацию для песни», выбирайте так:
- Если есть
cover.jpg: сделатьcover_visualizer.mp4— обложка + waveform снизу. - Если обложки нет: сделать
spectrum.mp4черезshowspectrum. - Если нужен Telegram teaser: ограничить до 30–60 секунд.
- Если нужен вау-эффект: предложить/сделать Python ASCII/cyberpunk visualizer.
Минимальный ответ пользователю после выполнения:
Готово: сделал MP4-визуализацию с аудио. Проверил ffprobe, видео и аудио потоки есть.