Я хочу объединить несколько видео с разной частотой кадров. Желаемый результат - иметь типичные 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!
}
но это приводит к тому, что звук не синхронизирован.
Теперь, я почти уверен, что так или иначе это не должно быть сделано. Может быть, есть простое решение, которого я не вижу?