2017-04-16 43 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