Вы всегда можете использовать коммерческое решение, которое я рекомендую, например Adobe After Effects, в котором есть API, которым вы можете управлять с помощью JavaScript (jsx
файлов).
Коммерческие решения для видео и композитинга, как правило, более надежны и имеют лучшие возможности кэширования и буферизации, чем альтернативы с бесплатными/открытыми исходными кодами, что означает, что они потенциально могут добавлять больше слоев в композицию без нехватки памяти.
(Просто в качестве примечания: я указываю вам на событие After Effects здесь, хотя оно ориентировано на композицию. Adobe Premier (или другой нелинейный редактор) был бы более естественным выбором для простых наложений изображений и текста, но он не имеет интерфейс сценариев (насколько мне известно, на сайте Adobe для этого нет ресурсов). Тем не менее, с помощью AE также можно создавать длинные последовательности, и вы можете делать больше с элементами, которые вы добавляете в сцену.)
Если вы уже знакомы с JavaScript, то это (очевидно) просто вопрос чтения документации API для его объектов, методов и свойств и т. д. (я добавил ссылку на документацию ниже).
У Adobe также есть собственный редактор JavaScript (но он не обязателен), который можно найти по следующим адресам:
Mac OS X:
/Applications/Utilities/Adobe Utilities CS6/ExtendScript Toolkit CS6/
Окна:
C:\Program Files\Adobe\Adobe Utilities - CS6\ExtendScript Toolkit CS6
В следующем примере, взятом с этого сайта, создается comp, а затем добавляет к нему текстовый слой (перейдите на сайт для полного скрипта):
// create project if necessary
var proj = app.project;
if(!proj) proj = app.newProject();
// create new comp named 'my text comp'
var compW = 160; // comp width
var compH = 120; // comp height
var compL = 15; // comp length (seconds)
var compRate = 24; // comp frame rate
var compBG = [48/255,63/255,84/255] // comp background color
var myItemCollection = app.project.items;
var myComp = myItemCollection.addComp('my text',compW,compH,1,compL,compRate);
myComp.bgColor = compBG;
а затем добавьте текстовый слой:
var text;
while (!myFile.eof){
text = myFile.readln();
if (text == "") text = "\r" ;
myComp.layers.addText(text);
}
Вы также можете управлять Photoshop/Illustrator с помощью файлов JavaScript/jsx, поэтому здесь вы можете создавать мощные комбинации/эффекты и т. д. (что напоминает мне старый добрый AREXX :-)).
Существуют аналогичные API для таких решений, как Flame (и Combustion, который больше не доступен после того, как Auto-desk приобрел его), которые используют Python, но диапазон цен здесь относительно высок.
Если коммерческие варианты не подходят, вы можете изучить Blender, который также предоставляет API для Python.
Но обратите внимание, что Blender в первую очередь ориентирован на 3D, но также может использоваться для композитинга видео.
Пример, взятый с этой страницы, выведет текст на экран:
def write():
"""write on screen"""
width = render.getWindowWidth()
height = render.getWindowHeight()
# OpenGL setup
bgl.glMatrixMode(bgl.GL_PROJECTION)
bgl.glLoadIdentity()
bgl.gluOrtho2D(0, width, 0, height)
bgl.glMatrixMode(bgl.GL_MODELVIEW)
bgl.glLoadIdentity()
# BLF drawing routine
font_id = logic.font_id
blf.position(font_id, (width * 0.2), (height * 0.3), 0)
blf.size(font_id, 50, 72)
blf.draw(font_id, "Hello World")
И, конечно же, вы всегда можете создавать сценарии для таких программ, как FFmpeg, который сам по себе достаточно мощный и гибкий.
Вы можете создать сценарий, добавив к нему аргументы в командной строке, например (взято отсюда а>):
Покажите текстовую строку, скользящую справа налево в последней строке видеокадра. Предполагается, что файл «LONG_LINE» содержит одну строку без символов новой строки.
drawtext="fontsize=15:fontfile=FreeSerif.ttf:text=LONG_LINE:y=h-line_h:x=-50*t"
Вы просто поместите это в какой-нибудь пакетный файл и запустите его. Ограничения, конечно, заключаются в том, что вам нужно немного поработать методом проб и ошибок, чтобы текст и изображения отображались именно там, где вы хотите.
Я никогда не пробовал сотни слоев и сомневаюсь, что у него есть встроенный буфер/кеширование для обработки большого количества слоев, но попробовать стоит, так как в остальном он бесплатный и мощный.
Ресурсы:
person
Community
schedule
19.09.2013