Рендеришь видео в стиле терминала на питоне. Также терминально, как стадия рака. Текст появляется посимвольно в синхронизации с аудио, сбоку выезжают картинки, фон живёт своей жизнью. Всё рисуется попиксельно. Работа проверена ТОЛЬКО НА ЛИНУКСЕ
content.py - пишешь текст и команды по главам
transcribe.py - faster-whisper транскрибирует аудио в слова с таймингами
align.py - выравнивает слова по тексту глав, делает char_times
main.py - строит таймлайн кадров, рендерит через multiprocessing, пайпит в ffmpeg
pip install pillow faster-whisper numpy
# + ffmpeg в системе
# + CUDA GPU для транскрибации# Транскрибировать аудио главы
python transcribe.py audio/ch0.mp3 -o audio/ch0_words.json
# Выровнять одну главу
python align.py audio/ch0_words.json --chapter 0
# Сгенерировать фон (один раз)
python background.py -o background.mp4
# Рендер
python main.py -o output.mp4 --background background.mp4
# Рендер только первых двух глав для проверки
python main.py -o test.mp4 --max-chapter 1
# Превью (каждый 30-й кадр в папку, без ffmpeg)
python main.py --previewВ content.py описываешь главы. Каждая глава - это команда и текст вывода:
{
"command": "cat intro.txt", # команда которую "печатает" пользователь
"dir": "~/project", # директория в промпте
"audio": "audio/ch0.mp3", # аудио для этой главы
"duration": 10.0, # запасная длительность если нет timings.json
"output": "Текст главы...", # стримится посимвольно
}Внутри output можно вставлять маркеры картинок:
[[IMG:imgs/photo.jpg:left]] - картинка выезжает слева
[[IMG:imgs/photo.jpg:right]] - картинка выезжает справа
[[/IMG:left]] - левая панель уезжает
[[/IMG]] - обе панели уезжают
Почему Pillow?
Потому что весело. Pillow - простой инструмент, который ты держишь в руках и понимаешь что происходит. Никакой магии, никаких абстракций поверх абстракций. Хочешь нарисовать прямоугольник - рисуешь прямоугольник. Это интереснее, чем скормить JSON в какой-нибудь Remotion и получить видос.
Почему не Manim / MoviePy / After Effects?
Manim заточен под математические анимации и тащит за собой LaTeX. MoviePy - обёртка над ffmpeg с кучей ограничений. After Effects стоит денег, не запускается из терминала и не работает на линуксе. Pillow запускается везде и ты сам контролируешь каждый пиксель.
Почему не записать экран терминала напрямую?
Можно. Но тогда ты зависишь от шрифтов системы, размера окна, рендеринга терминала и ещё кучи переменных. Здесь всё детерминировано: один и тот же content.py + timings.json дадут побайтово идентичный результат на любой машине.
Зачем реакционно-диффузная система для фона?
Потому что красиво. Альтернатива - статичный фон или что-то нарезанное из стока. Имхо достаточная причина для использования.
Можно ли сделать видео на английском?
Да. В content.py меняешь текст, в transcribe.py меняешь --language en. Всё остальное без изменений. В целом ограничений по языкам нет, главное, чтобы Faster Whisper large-v3 поддерживала.
Принимаются ли контрибуции?
Чел, ты рили? Какие нахер контрибуции в едва ли не щитпост репозиторий.
Если тебе руки занять нечем - у меня есть нормальные репозитории, где компетентные люди реально нужны: