AVFoundation - изменение частоты кадров - PullRequest
0 голосов
/ 16 января 2019

Я хочу объединить несколько видео с разной частотой кадров. Желаемый результат - иметь типичные fps, такие как 24, 30, 60 и т. Д. Но когда я делаю это, используя AVAssetWriter, AVAssetReader и просто добавляя каждый X-кадр к видеовходу (что является плохой практикой, когда я читаю где-то ), это приводит к странным FPS.

Я также попытался удалить CMSampleBuffer с:

fileprivate func setTimeStamp(_ sample: CMSampleBuffer, newTime: CMTime) -> CMSampleBuffer {
    var count: CMItemCount = 0
    CMSampleBufferGetSampleTimingInfoArray(sample, entryCount: 0, arrayToFill: nil, entriesNeededOut: &count);
    var info = [CMSampleTimingInfo](repeating: CMSampleTimingInfo(duration: CMTimeMake(value: 0, timescale: 0), presentationTimeStamp: CMTimeMake(value: 0, timescale: 0), decodeTimeStamp: CMTimeMake(value: 0, timescale: 0)), count: count)
    CMSampleBufferGetSampleTimingInfoArray(sample, entryCount: count, arrayToFill: &info, entriesNeededOut: &count);

    for i in 0..<count {
        info[i].decodeTimeStamp = newTime
        info[i].presentationTimeStamp = newTime
    }

    var out: CMSampleBuffer?
    CMSampleBufferCreateCopyWithNewTiming(allocator: nil, sampleBuffer: sample, sampleTimingEntryCount: count, sampleTimingArray: &info, sampleBufferOut: &out);
    return out!
}

но это приводит к тому, что звук не синхронизирован.

Теперь, я почти уверен, что так или иначе это не должно быть сделано. Может быть, есть простое решение, которого я не вижу?

...