Spa*_*Dog 5 avfoundation ios avassetwriter avassetwriterinput
我正在创建我的这个应用程序,并以120和240 fps拍摄视频.
当我在Mac上观看这些视频时,我会在时间轴下方看到这些标记.
这些标记是可编辑的,代表慢动作区域.因此,视频以正常帧速率开始,以慢动作进入并在结束时返回正常帧速率.iOS没有把那些标记放在那里.在那种情况下,我想知道是否有办法删除它们,使视频完全慢动作.
我只是AVAssetWriter正常初始化,就像我对视频非慢动作一样.
此外,我注意到这些"慢动作"视频并不是真正的慢动作,但它们是慢动作的"配方",只能在使用QuickTime X的iOS设备和Mac上正常播放.甚至QuickTime 7都没有正确播放它们.
无论如何要使这个东西成为可以在任何玩家,任何计算机上播放的真正的慢动作?
您的“慢动作”视频文件实际上只是高帧速率的视频文件。iOS 正在降低播放速率,以慢动作的形式展示额外的帧。问题是其他播放器以 1 的播放速率播放,因此为了使效果可移植,您需要修改帧呈现时间戳。
您可能可以使用 an 来做到这一点,AVMutableComposition但我更喜欢使用 more wysiwyg 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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
454 次 |
| 最近记录: |