2

我有一些代码,在下面提供。这将采用 2 个视频资产,并将第二个资产插入到第一个资产中。截至目前,我AVMutableComposition每次都调用一个新的并返回一个全新的组合,这很耗时。我想有一种方法可以删除一段视频,插入另一段,而不必制作整个作品。有什么建议么?(代码有效,真正寻找时间消耗减少)。

1)有没有办法只更改视频的一部分而不是(这是我目前每次需要更改视频时都在做的事情)

  • 1) 制作一个新的 AVMutableComposition
  • 2)添加第一个视频
  • 3)添加第二个视频
  • 4)添加第一个视频的最后一部分

或者有没有办法......(我想做什么)

  • 1) 获取第一个视频
  • 2)去设定我想改变的时间(比如10秒)
  • 3)删除我想要的时间量,然后插入第二个视频的时间
  • 4) 没有第 4 步,因为我只会更改一部分视频,而不是重新创建一个全新的视频。

我当前的代码

    let mixComposition = AVMutableComposition()

    let firstTrack = mixComposition.addMutableTrackWithMediaType(AVMediaTypeVideo, preferredTrackID: Int32(kCMPersistentTrackID_Invalid))
    do {
        try firstTrack.insertTimeRange(CMTimeRangeMake(kCMTimeZero, CMTime(seconds: 10, preferredTimescale: 600)), ofTrack: firstAsset.tracksWithMediaType(AVMediaTypeVideo)[0], atTime: kCMTimeZero)
    } catch _ {
        print("Failed to load first track")
    }

    let secondTrack = mixComposition.addMutableTrackWithMediaType(AVMediaTypeVideo, preferredTrackID: Int32(kCMPersistentTrackID_Invalid))
    do {
        try secondTrack.insertTimeRange(CMTimeRangeMake(kCMTimeZero, secondAsset.duration), ofTrack: secondAsset.tracksWithMediaType(AVMediaTypeVideo)[0], atTime: CMTime(seconds: 10, preferredTimescale: 600))

    } catch _ {
        print("Failed to load second track")
    }

    let thirdTrack = mixComposition.addMutableTrackWithMediaType(AVMediaTypeVideo, preferredTrackID: Int32(kCMPersistentTrackID_Invalid))
    do {
        try thirdTrack.insertTimeRange(CMTimeRangeMake(kCMTimeZero, secondAsset.duration+CMTime(seconds: 10, preferredTimescale: 600)), ofTrack: firstAsset.tracksWithMediaType(AVMediaTypeVideo)[0], atTime: CMTime(seconds: 10, preferredTimescale: 600))

    } catch _ {
        print("Failed to load second track")
    }
4

0 回答 0