2017-04-16 1 views
5

私は120および240 fpsでこの私のビデオと撮影ビデオを作成しています。スローモーションのすべてのスローモーションビデオを作成する

これらの動画を私のMacで見ると、タイムラインの下にこれらのマーカーが表示されます。

enter image description here

これらのマーカーは編集可能であり、スローモーションである領域を表します。したがって、ビデオは通常のフレームレートで開始し、スローモーションで入力し、最後に通常のフレームレートに戻ります。私はそれらのマーカーをそこに置かない、iOSはした。その場合、それらを削除してビデオを完全にスローモーションにする方法があるのだろうかと思います。

AVAssetWriterは、ビデオスローモーションの場合のように通常は初期化中です。

また、私はこれらの「スローモーション」ビデオが実際にスローモーションではないことに気付きましたが、QuickTime Xを使ってiOSデバイスやMacで正しく再生されるスローモーションの「レシピ」です。 。

とにかく、どのようなプレーヤーでも、どのコンピュータでも再生できる本当のスローモーションにするには?

答えて

2

"スローモーション"ビデオファイルは、実際にはフレームレートの高いビデオファイルです。 iOSは、余分なフレームをスローモーションの形で見せるために再生レートを下げています。問題は、他のプレイヤーが1の再生レートで再生することです。そのため、エフェクトをポータブルにするには、代わりにフレームプレゼンテーションタイムスタンプを変更する必要があります。

おそらくAVMutableCompositionでこれを行うことができますが、より多くのwysiwyg 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

関連する問題