ImageSequencer

A badge showing the current build status on bitrise. Please click to view more A badge showing Swift compatibility, currently 5.8 A badge showing compatibility with Apple platforms. Currently compatible with iOS, macOS and tvOS.

概述

ImageSequencer 是一个适用于 iOS、macOS、tvOS 的 Swift 框架,允许您从一系列图像创建视频。由 Sam Stone 开发。

正在 Lapsey 中投入生产使用。在 iOS 上创建美丽的时延摄影 - 在这里了解更多。

该 API 可以在 ImageSequencerController 接口中找到。

安装

前往 文件 > Swift Packages > Add Package Dependency 并添加以下 URL

https://github.com/samst-one/ImageSequencer

使用方法

  1. 首先,我们需要将 ImageSequencer 导入到我们的项目中,通过导入框架来实现。
import ImageSequencer
  1. 接下来,我们需要创建一个 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 方法可能会抛出异常。

  1. 有了 controller,我们现在可以访问 API。 我们首先必须在渲染之前启动一些内部 ImageSequencer 进程。 为此,调用:
controller.start()
  1. 当您拥有想要渲染成视频的图像时,我们可以调用下面的 render 函数。 参数的分解如下。

    • 参数
      • images: 您希望以 URL 格式渲染的图像集合。
      • didAddFrame: 一个闭包,返回一个表示渲染完成百分比的双精度浮点数。
      • completion: 当所有图像都渲染完毕时调用的闭包。 它返回一个可选的 Error

所以代码看起来有点像这样

controller?.render(images:  images) { percent in

} completion: { error in
                
}
  1. 一旦 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.
        }
    }
}

包含一个示例应用程序。