Loop AVMutableCompositionTrack

后端 未结 3 629
深忆病人
深忆病人 2021-02-04 21:15

I have got two audio tracks on me that I combine with one another like this:

AVMutableComposition *composition = [[AVMutableComposition alloc] init];

AVMutableC         


        
3条回答
  •  暖寄归人
    2021-02-04 21:41

    In swift with repeat whiel Loop.

    fix video length isuue

    let audioLength = CMTime(value: 100, timescale: 1)
    let videoLength = CMTime(value: 220, timescale: 1)
    
    func getAudioRepeatInfo(audioLength:CMTime, videoLength:CMTime) -> [(at:CMTime, duration:CMTime)] {
        var at = [(at:CMTime, duration:CMTime)](), start = CMTime.zero
        repeat {
            let info = (at:start, duration: min(CMTimeSubtract(videoLength, start), audioLength) )
            at.append(info)
            start = CMTimeAdd(start, info.duration)
        } while start < videoLength
        return at
    }
    
    var ranges =  getAudioRepeatInfo(audioLength: audioLength, videoLength: videoLength)
    

    Playground Output:

    [(at: __C.CMTime(value: 0, timescale: 1, flags: __C.CMTimeFlags(rawValue: 1), epoch: 0), duration: __C.CMTime(value: 100, timescale: 1, flags: __C.CMTimeFlags(rawValue: 1), epoch: 0)),
     (at: __C.CMTime(value: 100, timescale: 1, flags: __C.CMTimeFlags(rawValue: 1), epoch: 0), duration: __C.CMTime(value: 100, timescale: 1, flags: __C.CMTimeFlags(rawValue: 1), epoch: 0)),
     (at: __C.CMTime(value: 200, timescale: 1, flags: __C.CMTimeFlags(rawValue: 1), epoch: 0), duration: __C.CMTime(value: 20, timescale: 1, flags: __C.CMTimeFlags(rawValue: 1), epoch: 0))]
    

    Use:

    for info in repeatInfo {
        try compositionAudioTrack1?.insertTimeRange(.init(start: .zero, duration: info.duration), of: assetTrack, at: info.at)
    }
    

提交回复
热议问题