Закон №12. Люстиг и Капоне



- Подача
- Рассказчик с иронией, без мата
- Голос
- Ivan — Multilingual Storyteller
- Темп
- ≈145 слов в минуту
- Длина
- 84 с, 12 сцен, 35 опорных слов
Как сделать 80-секундный 2D-мультик для рилс: от текста и голоса до готового файла. Всё на примере двух наших эпизодов по «48 законам власти». Три пути: без кода, с ИИ-ассистентом и полностью кодом.






Что получится
Оба мультика нарисованы в одном стиле: газетная печать 1920-х, жирный чернильный контур, растровые точки в тенях. Озвучены они по-разному. На этих двух примерах видно, как одна и та же технология даёт разное настроение.






Для всех уровней
У каждого эпизода пять блоков. Пропорции ниже взяты из «Закона №1», шкала — секунды ролика.
| Блок | Задача | Как это звучит в «Законе №1» |
|---|---|---|
| Хук | Парадокс или вызов в первой фразе, пока палец не пролистал | «Кто больше всех выё**вается — тот больше всех и получает. Щас объясню» |
| Закон | Название и перевод на простой язык | «Не затмевай господина. По-простому — не выпендривайся перед начальником» |
| История | Одна реальная история, в конце поворот | Фуке устроил королю тусу века, через три недели его арестовал д’Артаньян |
| Сегодня | Перенос в офис, деньги, отношения и практический совет | «Презентация — огонь, а повышение уходит другому» |
| Вопрос | Вопрос в комментарии и анонс следующей серии | «Тебя наказывали за хорошую работу? Дальше — закон второй» |
Для всех уровней
Тон решает больше, чем картинка. Выбери манеру до того, как писать текст: от неё зависят слова, голос, темп и даже музыка.
Мат мы оставляем в голосе, а в субтитрах закрываем звёздочками: «выё**вается», «пи**ец». Учти, что ролики с матом хуже рекомендуются, а ВКонтакте и YouTube к ним строже.
Выбери свой путь
Результат на всех трёх уровнях похожий. Разница в том, сколько ручной работы и насколько легко потом сделать следующую серию.
Попроси чат-бот написать текст по структуре из «Анатомии». Потом прочитай вслух и вычеркни всё, что не сказал бы другу.
Ты сценарист вертикальных роликов. Напиши текст озвучки на 75–85 секунд (170–210 слов) про закон №[номер] из «48 законов власти» Роберта Грина. Структура: 1) хук-парадокс в первой фразе; 2) название закона и перевод на простой язык; 3) одна историческая история с поворотом в конце; 4) как это выглядит сегодня: офис, деньги или отношения, плюс практический совет; 5) вопрос зрителю и анонс следующего закона. Манера: [рассказчик — спокойно, с иронией, без мата] или [блогер — на «ты», короткими фразами, разговорными словами]. Один абзац = одна сцена. Числа пиши словами. Не цитируй книгу, пересказывай своими словами.
Модели путают даты и выдают легенды за факты. Вставь готовый текст в новый чат с промтом ниже, а спорное проверь по Википедии.
Перечисли списком все факты из этого текста. Для каждого укажи: «точно», «спорно» или «легенда», и где это проверить. Текст: [вставь сценарий]
Легенды можно оставлять, но говори «по легенде». История Люстига и Капоне — легенда, арест Фуке д’Артаньяном — факт.
ElevenLabs → библиотека голосов → фильтры «русский», «мужской» → слушай превью. Модель eleven_v4. Интонацию задают метки в квадратных скобках: [chuckles], [slyly], [excited]. Ставь их перед фразой.
Делай два дубля и выбирай тот, где слова чище. Если голос медленнее нужного, ускорь его в монтаже в 1,1 раза.
Один дубль на 80 секунд стоит примерно 1200–1500 кредитов. На бесплатном тарифе 10 000 кредитов в месяц, этого хватает на 3–4 ролика с запасным дублем. Коммерческая лицензия есть только на платных тарифах.
Сначала добейся одного кадра-эталона в нужном стиле. Потом по нему сделай лист персонажа и прикладывай оба изображения к каждой сцене, иначе стиль поплывёт.
Vertical 9:16 2D cartoon frame for an Instagram explainer about history. Style: 1920s newspaper print — warm off-white paper with grain, bold black ink outlines, flat colors from a small palette (ink black, mustard gold, deep red, muted navy), halftone dots for shadows, sunburst rays in the background. One character: [кто, во что одет]. Simple round head, dot eyes, expressive eyebrows. No text, no logos.
Character sheet in the exact style of the attached image: [герой]. Full body front view and three close-up expressions: smug, shocked, sad. Plain paper background. No text, no logos.
На каждый абзац нужны одна-две картинки. Лица держи в верхних двух третях, нижняя треть уйдёт под субтитры.
Vertical 9:16 illustration in the exact style of the attached image. Scene: [что происходит]. Characters: [кто, по приложенному листу]. Keep all faces in the upper two thirds; leave the bottom third calm for subtitles. No text, no letters.
CapCut, проект 9:16. Расставь картинки по абзацам голоса. Каждой дай медленное увеличение примерно на 5–8 %. На ключевых словах меняй картинку или добавляй наклейку-штамп («ТУСА ВЕКА», «19 ЛЕТ»). Между сценами — короткий переход-шторка 0,3 с.
Включи автоматические субтитры и проверь каждое слово. Стиль: жирный узкий шрифт капсом, белый с толстой чёрной обводкой, текущее слово жёлтым, по 2–3 слова на экране. Мат закрой звёздочками вручную.
Звуки на ключевые слова: печатная машинка на дате, касса на деньгах, штамп на надписях. Музыку опусти примерно на 20 дБ ниже голоса. Экспорт: 1080×1920, 30 кадров в секунду.
Картинки по-прежнему из генератора, как у новичка. Тайминги, субтитры и звуки считает программа, ты только проверяешь.
Сценарий кладём в script/voice.txt: абзацы через пустую строку, один абзац — одна сцена. Это единственный файл, который правишь руками.
Генерируем два дубля голоса и прогоняем оба через whisper. Берём тот, где распознанный текст ближе к сценарию. У нас пометка [ominous] в одном дубле смяла «и молча смотрит» в «и мог чё смотреть», а на слух это легко пропустить.
ffmpeg -i take2.mp3 -af atempo=1.12 -ar 44100 -ac 1 public/voice.wav
whisper.cpp даёт время каждого слова. Скрипт сопоставляет слова сценария со словами whisper (в Python это difflib) и получает:
# ключ, номер абзаца, слово (строчными, без «ё» и знаков), какое по счёту вхождение
BEATS = [("show", 1, "выебывается", 1), ("get", 1, "получает", 1),
("dart", 7, "дартаньян", 1), ("carriage", 7, "карету", 1),
("years", 8, "девятнадцать", 1)]
# whisper пишет числа цифрами — разворачиваем их в слова перед сравнением
NUM = {"1661": ["тысяча", "шестьсот", "шестьдесят", "первый"], "19": ["девятнадцать"]}Отдай ассистенту промт ниже. Картинки сцен положи в public/scene_01.png, scene_02.png и так далее.
Создай Remotion-проект 1080×1920, 30 кадров в секунду. Вход: script/voice.txt (абзац = сцена), public/voice.wav, audio/words.json (слова whisper со временем начала и конца), картинки public/scene_01.png… по числу абзацев, звуки public/s_*.wav. Сделай: 1) скрипт, который сопоставляет слова сценария со словами whisper и считает начало каждой сцены и опорные слова из списка BEATS; 2) композицию: картинка сцены на весь кадр с наездом 100→104 %, шторка-переход 9 кадров, подписи-штампы, которые выскакивают пружиной на опорных словах; 3) караоке-субтитры по 2–3 слова, рвать на знаках препинания, текущее слово жёлтым, шрифт Oswald 700 капсом, белый с чёрной обводкой 16 px, на 300 px от нижнего края; числа цифрами, мат звёздочками; 4) звуки на опорных словах, музыку на громкости 0,12 с плавным входом и выходом. Перед полным рендером покажи 6 контрольных кадров.
Звуковые эффекты ElevenLabs стоят около 17 кредитов за штуку. Длительность из промта генератор игнорирует и отдаёт 1–4 секунды, поэтому длинные фоны (гул, ветер) зацикливай. Каждый файл приведи к −20 LUFS, тогда громкости в монтаже предсказуемы.
ffmpeg -i stamp.mp3 -af "loudnorm=I=-20:TP=-2:LRA=11" -ar 44100 -ac 2 public/s_stamp.wav
Рендерим ролик, затем нормализуем громкость в два прохода до −14 LUFS, как требуют площадки, и сжимаем видео.
npx remotion render src/index.ts Episode out/raw.mp4 # 1-й проход: измерить громкость ffmpeg -i out/raw.mp4 -vn -af loudnorm=I=-14:TP=-1.5:LRA=11:print_format=json -f null - # 2-й проход: подставить measured_I, measured_TP, measured_LRA, measured_thresh и offset из первого ffmpeg -i out/raw.mp4 -c:v libx264 -crf 24 -preset slow -pix_fmt yuv420p \ -af "loudnorm=I=-14:TP=-1.5:LRA=11:measured_I=…:measured_TP=…:measured_LRA=…:measured_thresh=…:offset=…:linear=true" \ -c:a aac -b:a 192k final.mp4
Так сделаны наши эпизоды: ни одной сгенерированной картинки, персонажи и предметы нарисованы SVG-кодом. Это дольше на первой серии, зато герои всегда одинаковые, а движение привязано к словам автоматически.
Палитра и шрифты в одном файле. Все цвета берутся оттуда, поэтому серия выглядит цельной.
export const C = {
paper: "#EFE3C8", paperD: "#E2D2AE", ink: "#1D1A16",
gold: "#E3A531", red: "#B7352B", green: "#7FA36B", skin: "#F1C9A1",
};
export const STROKE = 6; // жирный чернильный контур везде одной толщиныНачало координат — между ступнями, вверх — минус Y. Руки задаются углом в градусах, в руку можно вложить предмет. Лицо — набор выражений, моргание по таймеру. Один компонент Людовика служит во всех сценах: от тусы до Версаля.
<Louis x={540} y={1760} s={1.08} t={t}
face={t > B.except ? "sus" : "smile"} // «Кроме короля» — король начинает подозревать
armL={30} armR={-30} />Ни одного ключевого кадра руками. Сцена получает номер кадра t и опорные слова B в кадрах от начала сцены. Сменился голос — пересчитал тайминги, и анимация сама встала на новые слова.
export const S7: React.FC<SP> = ({ t, B }) => {
const enter = ease(t, B.dart - 10, B.dart + 8); // входит на слове «Дартаньян»
const car = ease(t, B.carriage - 36, B.carriage - 10); // карета подъезжает к слову «карету»
return (
<g>
<Dartagnan x={1200 - enter * 420} y={1820} t={t} face="smirk" />
<Label text="ДАРТАНЬЯН" sub="да, тот самый" k={pop(t, B.musk - 10)} />
{car > 0 ? <Carriage x={lin(car, 0, 1, -500, 360)} y={1700} t={t} /> : null}
</g>
);
};Четыре приёма делают код похожим на рисованную анимацию:
<filter id="boil">
<feTurbulence type="fractalNoise" baseFrequency="0.02" numOctaves={1}
seed={Math.floor(frame / 4) % 6} result="n" />
<feDisplacementMap in="SourceGraphic" in2="n" scale={4.5}
xChannelSelector="R" yChannelSelector="G" />
</filter>Рендерим 10–16 контрольных кадров одной сборкой и склеиваем их в сетку через ffmpeg xstack. Смотрим на опорных словах и на стыках сцен. Чаще всего встречаются:
Новый закон начинается с копии папки эпизода. В ней меняются три вещи:
voice.txt;BEATS;Персонажи, реквизит, субтитры, шторки и звуки уже готовы. Новые герои добавляются в отдельный файл: так в эпизод про Фуке пришли Людовик, д’Артаньян и начальник.
Инструмент
Вставь сценарий: калькулятор посчитает длину, число сцен и примерную стоимость голоса. В поле для примера уже стоит текст «Закона №1».
—
Кредиты посчитаны примерно, по нашим сериям: около 1,1–1,2 кредита ElevenLabs за знак на модели eleven_v4. Бесплатно дают 10 000 кредитов в месяц.
Для всех уровней
Голос — главный. Музыка играет фоном на громкости 0,12, на смене сцены тихий свист на 0,2, звуковые эффекты стоят на ключевых словах. Готовый ролик — −14 LUFS.
| Звук | Когда | Громкость |
|---|---|---|
| Штамп | Надписи «ПОЛУЧИЛ», «19 ЛЕТ», «КЛАССИКА» | 0,6–0,8 |
| Касса | Деньги, повышение, «ровно пять тысяч» | 0,4–0,6 |
| Машинка | Место и дата: «Франция, 1661», «Чикаго, 1926» | 0,5–0,6 |
| Тревожный удар | Взгляд Капоне, «кроме короля», шеф сквозь зубы | 0,5–0,85 |
| Скретч | Поворот: «но не честности», «кроме короля» | 0,7 |
| Фанфары | Появление короля, Версаль | 0,5–0,6 |
| Толпа | Аплодисменты, вздох «6000 гостей» | 0,55–0,6 |
| Лифт | «Работает как лифт», «ты хорош» | 0,35–0,7 |
Всего в двух сериях 18 звуков ElevenLabs по ≈17 кредитов. Музыку сделали синтезом: нуар-свинг и клавесин с битом. Это заглушки, живой трек из библиотеки звучит лучше.
Опыт
С [ominous] «и молча смотрит» превратилось в «и мог чё смотреть».
Распознавай оба дубля и сравнивай с текстом.
Образец шёл на 184 слова в минуту, наш дубль — на 150.
Ускорение на 12 % без смены тембра.
Бесплатный тариф иногда отвечает «Free generations are busy» и запускает один дубль из двух.
Кредиты за незапущенный не списываются — подожди и повтори.
Генератор отдаёт 1–4 секунды, сколько ни пиши в промте.
Длинные фоны зацикливай с затуханием.
Синтезированные заглушки звучали на −50…−66 дБ, их просто не было слышно.
Меряй громкость каждого файла.
Реплика Люстига закрыла лицо Капоне, в финале герой перекрыл кнопку «Подпишись».
Пузыри вбок с длинным хвостом, лица — выше субтитров.
Кадр для обложки попал в середину шторки.
Проверяй не только опорные слова, но и стыки сцен.
Образец — белый фон, тонкие линии, заголовок сверху.
Копируй формат и темп. Картинку делай своей.
Перед публикацией