Рендерить из Blender сразу в видео-файл не всегда удобно. Чаще на выходе рендера получают секвенцию (набор) кадров, которые потом, например после дополнительной пост-обработки, нужно собрать в итоговый видео-файл.
Собрать секвенцию кадров в видео можно, как средствами самого Blender, при помощи Visual Screen Editor (VSE), так и с помощью сторонних кодеков, например FFmpeg.
Для начала нужно скачать и установить кодек FFmpeg.
Скачать кодек можно с официального сайта FFmpeg: https://ffmpeg.org/download.html
Пользователи Windows могут скачать кодек с GitHub. На этот репозиторий ведет ссылка с официального сайта: https://github.com/BtbN/FFmpeg-Builds/releases
Кодек не требует специальной установки, достаточно распаковать скачанный архив в удобное место, например в директорию “Program Files”.
Сборка секвенции кадров в видео
Вызов кодека осуществляется из командной строки.
Нажмите сочетание клавиш: Win + r, в открывшемся окошке введите “cmd” (без кавычек) и нажмите “Enter” – откроется окно консоли с командной строкой.
Для вызова кодека нужно указать полный путь к его исполняемому фалу, который находится в директории “bin”. Например, если вы установили кодек в директорию “C:\Program Files\ffmpeg” его вызов будет осуществляться следующим образом:
1 |
"c:\Program Files\ffmpeg\bin\ffmpeg.exe" |
Обратите внимание – здесь кавычки необходимы т.к. в исполняемой команде присутствует пробел.
Далее необходимо указать параметры для работы кодека:
В первую очередь укажем расположение директории с исходными кадрами.
1 |
-i frames/%%4d.png |
Необходимо указать полный или относительный путь к директории, в которую Blender отрендерил кадры анимации.
Относительные пути указываются от корневой директории командной строки. Вы можете поменять корень командной строки с помощью команды “cd”.
В данном примере указан относительный путь к директории “frames”.
1 |
"c:\Program Files\ffmpeg\bin\ffmpeg.exe" -i frames\%%4d.png |
Blender сохраняет файлы с кадрами по номерам, состоящим из 4 цифр: 0001,png, 0002.png и т.д. Поэтому, чтобы все кадры были обработаны кодеком в качестве имени файла мы указываем маску “%%4d.png”.
Blender сохраняет первый кадр под именем 0001.png, в то время, как кодек начинает считать кадры с нуля. Поэтому нужно указать в параметрах начальный кадр.
1 |
"c:\Program Files\ffmpeg\bin\ffmpeg.exe" -start_number 1 -i frames\%%4d.png |
Часто бывает необходимо собрать в видео несколько секвенций кадров, сохраненных в разные директории, например, сначала цветные кадры и следом за ними – маску прозрачности.
Для того, чтобы указать кодеку несколько директорий с кадрами, пути к ним нужно записать в текстовый файл. Путь к каждой директории должен быть указан в новой строке, например для двух исходных директорий с кадрами “color” и “alpha”, файл будет иметь следующий вид:
1 2 |
file 'color\%4d.png' file 'alpha\%4d.png' |
Можно подготовить такой файл вручную, а можно быстро создать из командной строки, выполнив две следующие команды:
1 2 |
echo file 'color\%%4d.png' > sequences.txt echo file 'alpha\%%4d.png' >> sequences.txt |
После этого, можно вызвать кодек, указав созданный файл в качестве исходного:
1 |
"c:\Program Files\ffmpeg\bin\ffmpeg.exe" -f concat -i sequences.txt |
Кодек может выдать ошибку “Unsafe file name”. Для ее устранения добавим дополнительный параметр, разрешающий спорные имена файлов:
1 |
-safe 0 |
Все вместе:
1 |
"c:\Program Files\ffmpeg\bin\ffmpeg.exe" -f concat -safe 0 -i sequences.txt |
Также кодеку необходимо указать директорию, в которую будет сохранено готовое видео:
1 |
"c:\Program Files\ffmpeg\bin\ffmpeg.exe" -f concat -safe 0 -i sequences.txt output\output.mp4 |
В параметрах кодека можно указать уровень компрессии. Это делается через параметр “crf”:
1 |
-crf 10 |
Чем выше значение параметра – тем больший уровень компрессии будет использован, соответственно размер готового файла будет – меньше, а качество – хуже.
Если для финального видео требуется уровень “lossless” (без потерь качества), нужно установить значение 0. Размер готового файла в этом случае получится очень большим.
Значение порядка 17 считается визуально неотличимым по качеству от “lossless”.
1 |
"c:\Program Files\ffmpeg\bin\ffmpeg.exe" -f concat -safe 0 -i sequences.txt -crf 10 output\output.mp4 |
Так же на размер готового видео влияет пресет упаковки. Он также указывается в параметрах и имеет следующие значения:
1 2 3 4 5 6 7 8 9 |
ultrafast superfast veryfast faster fast medium slow slower veryslow |
При выборе пресета “ultrafast” размер файла будет большим, а время, затраченное на его обработку и упаковку – минимально. При выборе значения “veryslow” готовый видеофайл будет формироваться дольше, но его размер будет меньше.
1 |
"c:\Program Files\ffmpeg\bin\ffmpeg.exe" -f concat -safe 0 -i sequences.txt -preset veryslow -crf 10 output\output.mp4 |
Для совместимости готового видео с QuickTime проигрывателями нужно установить параметр “format”:
1 |
-vf format=yuv420p |
Для того, чтобы использовался кодировщик H.264 нужно указать его в параметрах:
1 |
-c:v libx264rgb |
Для того, чтобы указать кодеку частоту кадров, нужно добавить параметр “r’, указав желаемое количество кадров в секунду (fps):
1 |
-r 60 |
Для того, чтобы отключить подтверждение для перезаписи уже существующего файла, можно добавить параметр “-y”:
1 |
-y |
Все вместе:
1 |
"c:\Program Files\ffmpeg\bin\ffmpeg.exe" -y -f concat -safe 0 -r 60 -i sequences.txt -c:v libx264rgb -preset veryslow -crf 10 -vf format=yuv420p -r 60 output/output.mp4 |
Вызвав эту команду из командной строки вы укажете FFmpeg-кодеку собрать видео из кадров с указанными параметрами.
Для моих подписчиков на Patreon:
Командный файл *.cmd (Windows) в котором уже прописана команда сборки видео из секвенций кадров.
Если в папке проекта уже есть две директории с кадрами *.png : “color” (кадры в цвете) и “alpha” (кадры с альфа-маской) достаточно просто скопировать туда скачанный файл и запустить его двойным кликом. Готовое видео будет собрано в директорию “output”.
Предустановленные параметры сборки (максимальное качество): H.264, компрессия “lossless”, 60 fps, preset “veryslow”.
При необходимости вы можете отредактировать файл, установив нужные параметры.