我有一些代码,在下面提供。这将采用 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")
}