我正在创建我的这个应用程序,并以120和240 fps的速度拍摄视频。
当我在Mac上观看这些视频时,我会在时间轴下方看到这些标记。
这些标记是可编辑的,代表慢动作的区域。因此,视频以正常帧速率开始,以慢动作进入,最后返回到正常帧速率。我没有把那些标记放在那里,iOS放了。在那种情况下,我想知道是否有一种方法可以删除它们并使视频完全慢动作。
我只是像视频非慢动作一样正常初始化AVAssetWriter
。
另外,我注意到这些“慢动作”视频并不是真正的慢动作,但它们是慢动作的“配方”,只能在使用QuickTime X的iOS设备和Mac上正确播放。即使是QuickTime 7,也无法正确播放。
无论如何,要使此东西成为可以在任何播放器,任何计算机上播放的真正的慢动作?
最佳答案
您的“慢动作”视频文件实际上只是高帧率的视频文件。 iOS正在降低播放速率,以慢动作的形式炫耀多余的帧。问题是其他播放器以1的播放速率播放,因此要使该效果可移植,您需要修改帧表示时间戳。
您可能可以使用AVMutableComposition
做到这一点,但我更喜欢使用更多所见即所得的AVAssetReader
/AVAssetWriter
对。对于输入文件中的每一帧,都是这样的:
if let inSampleBuffer = readerOutput.copyNextSampleBuffer() {
let inTimeStamp = CMSampleBufferGetPresentationTimeStamp(inSampleBuffer)
let outTimeStamp = CMTimeMultiplyByFloat64(inTimeStamp, 240.0/30) // 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
}
关于ios - 制作真正慢动作的慢动作视频,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43438709/