2017-04-16 76 views
5

我正在创建这个应用程序,并以120和240 fps拍摄视频。制作一个真正的慢动作视频,都是慢镜头

当我在我的Mac上观看这些视频时,我在时间线下看到这些标记。

enter image description here

这些标记是可编辑的,并表示是在慢动作的区域。因此,视频以正常帧速率开始,以慢动作进入,并在最后恢复到正常帧速率。我没有把这些标记放在那里,iOS做的。在那种情况下,我想知道是否有办法将它们移除并使视频完全慢动作。

我刚刚初始化为AVAssetWriter,正如我对视频非慢动作所做的那样。另外,我注意到这些“慢动作”视频并不是真正的慢动作,但它们是慢动作的“食谱”,只需在iOS设备和使用QuickTime X的Mac上正确播放即可。甚至QuickTime 7也不能正确播放它们。

无论如何,这件事是一个真正的慢动作,可以在任何播放器,任何电脑上播放?

回答

2

您的“慢动作”视频文件实际上只是具有高帧率的视频文件。 iOS正在降低播放速度以显示慢动作形式的多余帧。问题是其他玩家以1的回放速率播放,因此为了使效果更加便携,您需要修改帧展示时间戳。

你或许可以做到这一点与AVMutableComposition但我更喜欢使用更所见即所得AVAssetReader/AVAssetWriter对。对于输入文件中的每一帧都是这样的:

if let inSampleBuffer = readerOutput.copyNextSampleBuffer() { 
    let inTimeStamp = CMSampleBufferGetPresentationTimeStamp(inSampleBuffer) 
    let outTimeStamp = CMTimeMultiplyByFloat64(inTimeStamp, 30.0/240) // slow 240 fps down to 30fps (8x slowmo) 
    var outSampleBuffer: CMSampleBuffer? 
    var outTimingInfo = CMSampleTimingInfo(duration: kCMTimeInvalid, presentationTimeStamp: outTimeStamp, decodeTimeStamp: kCMTimeInvalid) 

    if CMSampleBufferCreateCopyWithNewTiming(kCFAllocatorDefault, inSampleBuffer, 1, &outTimingInfo, &outSampleBuffer) == noErr { 
     writerInput.appendSampleBuffer(outSampleBuffer!) 
    } 
} else { 
    // finished 
} 
+0

BRILLIANT !!!!!!!!!谢谢 – SpaceDog