У меня есть код, приведенный ниже. Это займет 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")
}