ImageSequencer 是一个适用于 iOS、macOS、tvOS 的 Swift 框架,允许您从一系列图像创建视频。由 Sam Stone 开发。
正在 Lapsey 中投入生产使用。在 iOS 上创建美丽的时延摄影 - 在这里了解更多。
该 API 可以在 ImageSequencerController
接口中找到。
前往 文件 > Swift Packages > Add Package Dependency 并添加以下 URL
https://github.com/samst-one/ImageSequencer
ImageSequencer
导入到我们的项目中,通过导入框架来实现。import ImageSequencer
ImageSequencerController
对象。ImageSequencerController
作为包的 API。我们使用 ImageSequencerFactory
来创建。 我们也传入要创建的视频的设置。创建 ImageSequencerController
,我们这样做:let outputUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent("\(UUID().uuidString).mp4")
let renderSettings = RenderSettings(bitrate: 10000000,
size: CGSize(width: 1920,
height: 1080),
fps: 24,
outputUrl: outputUrl)
let controller = try? ImageSequencerFactory.make(settings: settings)
make
方法可能会抛出异常。
controller
,我们现在可以访问 API。 我们首先必须在渲染之前启动一些内部 ImageSequencer
进程。 为此,调用:controller.start()
当您拥有想要渲染成视频的图像时,我们可以调用下面的 render
函数。 参数的分解如下。
images
: 您希望以 URL 格式渲染的图像集合。didAddFrame
: 一个闭包,返回一个表示渲染完成百分比的双精度浮点数。completion
: 当所有图像都渲染完毕时调用的闭包。 它返回一个可选的 Error
。所以代码看起来有点像这样
controller?.render(images: images) { percent in
} completion: { error in
}
completion
处理程序在没有错误的情况下被调用,您就可以调用 finish()
方法来生成视频。 该视频可以在渲染设置中提供的输出 URL 中找到。controller?.finish { outputUrl in
// Video now available at output URL provided.
}
总而言之,要渲染图像序列,完整的代码如下
let outputUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent("\(UUID().uuidString).mp4")
let renderSettings = RenderSettings(bitrate: 10000000,
size: CGSize(width: 1920,
height: 1080),
fps: 24,
outputUrl: outputUrl)
let controller = try? ImageSequencerFactory.make(settings: settings)
controller?.start()
controller?.render(images: images) { percent in
// Update the user on progress here.
} completion: { error in
if error == nil {
controller?.finish { outputUrl in
// Video now available at output URL provided.
}
}
}
包含一个示例应用程序。