Video 以编程方式在视频剪辑上添加100个图像覆盖
我正在寻找一个编程视频编辑解决方案,它可以提供API,用于在视频1080p剪辑的特定坐标下,在特定时间/帧中添加图像和文本覆盖,以及将大小调整为720p等 我尝试了AviSynth,但由于内存不足错误,在总共约400次覆盖后被阻止-请参阅Video 以编程方式在视频剪辑上添加100个图像覆盖,video,video-processing,avisynth,Video,Video Processing,Avisynth,我正在寻找一个编程视频编辑解决方案,它可以提供API,用于在视频1080p剪辑的特定坐标下,在特定时间/帧中添加图像和文本覆盖,以及将大小调整为720p等 我尝试了AviSynth,但由于内存不足错误,在总共约400次覆盖后被阻止-请参阅 还有什么我可以尝试的吗?示例代码非常棒?您可以选择商业解决方案,我建议您使用,例如Adobe After Effects,它有一个API,您可以使用JavaScript jsx文件控制 商业视频和合成解决方案通常比免费/开源替代方案更健壮,具有更好的缓存和缓冲
还有什么我可以尝试的吗?示例代码非常棒?您可以选择商业解决方案,我建议您使用,例如Adobe After Effects,它有一个API,您可以使用JavaScript jsx文件控制 商业视频和合成解决方案通常比免费/开源替代方案更健壮,具有更好的缓存和缓冲能力,这意味着它们可以在不耗尽内存的情况下为合成添加更多层 作为旁注:我在这里指的是后效事件,尽管它是面向构图的。对于简单的图像和文本覆盖,Adobe Premier或其他非线性编辑器将是一个更自然的选择,但它没有AFAIK脚本界面,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,然后向其添加一个文本层“转到站点以获取完整脚本”:
//如有必要,创建项目
var proj=应用程序项目;
如果proj proj=app.newProject;
//创建名为“我的文本组件”的新组件
变量compW=160;//补偿宽度
var compH=120;//补偿高度
变量compL=15;//补偿长度秒
var compRate=24;//复合帧速率
var compBG=[48/255,63/255,84/255]//comp背景色
var myItemCollection=app.project.items;
var myComp=myItemCollection.addComp'my text',compW,compH,1,compL,compate;
mycop.bgColor=compBG;
然后添加一个文本层:
var文本;
虽然myFile.eof{
text=myFile.readln;
如果text==text=\r;
mycop.layers.addTexttext;
}
您还可以使用JavaScript/jsx文件控制Photoshop/Illustrator,因此在这里您可以制作强大的组合/效果等。这让我想起了好的旧AREXX:-
在Auto desk购买了使用Python的Flame和Combustion等解决方案后,不再提供类似的API,但这里的价格范围相对较高
如果商业变体不是一个选项,那么您可以研究Blender,它还为Python提供了API
但请注意,Blender主要是面向3D的,但也可以用于视频合成
示例取自将文本写入屏幕:
def写入:
在屏幕上写字
宽度=render.getWindowWidth
高度=render.getWindowHeight
OpenGL设置
bgl.glMatrixModebgl.GL_投影
bgl.glLoadIdentity
bgl.2D0,宽度,0,高度
bgl.glMatrixModelbgl.GL_模型视图
bgl.glLoadIdentity
绘图程序
font\u id=logic.font\u id
blf.positionfont_id,宽度*0.2,高度*0.3,0
建筑物尺寸单位id,50,72
blf.drawfont\u id,你好,世界
当然,你也可以编写程序脚本,比如FFmpeg,它本身就非常强大和灵活
您可以通过在命令行中向其添加参数来编写脚本,例如:
显示视频帧最后一行中从右向左滑动的文本行。假定文件“LONG_LINE”包含一行,没有换行符
drawtext="fontsize=15:fontfile=FreeSerif.ttf:text=LONG_LINE:y=h-line_h:x=-50*t"
您只需将其放入某种批处理文件并运行它。当然,限制是您需要进行一些尝试和错误操作,以使文本和图像准确地显示在您希望的位置
我从未尝试过数百层,我怀疑它是否有内置的缓冲区/缓存来处理大量的层,但它值得一试,因为它在其他方面既免费又强大
资源:
我在寻找AdobePremier的API,但没有考虑AdobeAfterEffects:我熟悉JavaScript,所以我相信AfterEffects将是一个完美的选择。谢谢