
Полная версия:
Вертикальный ролик скриптом: 2D-анимация, вырезка 9:16 и звук на слабом ПК

Шадрин Данил
Вертикальный ролик скриптом: 2D-анимация, вырезка 9:16 и звук на слабом ПК
Вертикальный ролик скриптом
Покадровая 2D-анимация, вырезка 9:16 и звук до −14 LUFS на видеокарте с 4 ГБ
От автора
Мне девятнадцать, я учусь на последнем курсе и монтирую вертикальные ролики не в монтажной программе, а скриптами. Это не причуда и не попытка «заехать с другой стороны»: у меня ноутбук с видеокартой на 4 ГБ и 23 ГБ оперативной памяти, и тяжёлый редактор на нём живёт плохо, а расчёт на кадры — отлично.
Код, сцены, позы, музыка и вся сборка — мои. Текст книги как таковой написан при помощи ИИ-агента, с которым я работаю каждый день: он черновик, я читаю и правлю. Клиентских кейсов я тут выдумывать не буду, их нет; будут реальные параметры с моих файлов, и их можно перепроверить_ffprobe_ом.
Глава 1. Конечная точка: что должно получиться
Вот спецификация трёх готовых роликов, снятая с файлов, а не из головы:
Файл
Длительность
Кадр
Частота
Видео
Аудио
Размер
vertical_1_rain.mp4
13,0 с
720×1280
24
h264, ~1 196 кбит/с
AAC 48 кГц, стерео
1,94 МБ
vertical_2_comet.mp4
14,0 с
720×1280
24
h264, ~818 кбит/с
AAC 48 кГц, стерео
1,43 МБ
vertical_3_final.mp4
14,0 с
720×1280
24
h264, ~845 кбит/с
AAC 48 кГц, стерео
1,48 МБ
Размер меньше двух мегабайт выбран не «для экономии»: такой файл можно приложить прямо в переписку, и он не упрётся в лимиты мессенджера. Это часть монтажа, а не упаковка.
Глава 2. Рендер: кадры летят в ffmpeg по pipe
Никаких тысяч png-шек на диске. draw_frame(t) рисует кадр в памяти, и он уходит в стандартный вход ffmpeg как raw video:
ffmpeg = subprocess.Popen([
"ffmpeg", "-y", "-f", "rawvideo", "-pix_fmt", "rgb24", "-s", f"{W}x{H}",
"-r", str(FPS), "-i", "-", "-an", "-c:v", "libx264", "-preset", "medium",
"-crf", "18", "-pix_fmt", "yuv420p", "-movflags", "+faststart", str(out),
], stdin=subprocess.PIPE, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
for i in range(f0, f1):
t = i / FPS
frame = draw_frame(t).convert("RGB")
ffmpeg.stdin.write(frame.tobytes())
Что тут важнее, чем кажется:
-i - со rawvideo вместо последовательности файлов. Диск не участвует, а на машине, где системный диск был забит под ноль, это вопрос выживания.
-an на первом проходе. Видеоряд без звука: звук прилетает позже отдельным слоем, иначе любая правка реплики означает перерендер картинки.
-crf 18 и -preset medium. Ниже 18 на 4 ГБ смысл теряет скорость, выше — заметно сыпятся градиенты ночного неба, а они у меня как раз ночные.
+faststart. Без него плеер не начнёт показывать ролик, пока не скачает конец файла, а на телефоне это выглядит как «видео не открывается».
Конец ознакомительного фрагмента.
Текст предоставлен ООО «Литрес».
Прочитайте эту книгу целиком, купив полную легальную версию на Литрес.
Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.
Вы ознакомились с фрагментом книги.
Для бесплатного чтения открыта только часть текста.
Приобретайте полный текст книги у нашего партнера:
Полная версия книги
Всего 10 форматов

