7

すべてのフレームをデコードせずに、開いたばかりのビデオのフレーム数を見つけようとしています。

で開き、ビデオAVAssetの を取得します。AVAssetTrack次は何 ?

4

4 に答える 4

5

これを行うための比較的高価な方法の 1 つは、AVAssetReader を使用してすべてのフレームを読み取り、それらをカウントすることです。

let asset = AVAsset(url: url)
let assetTrack = asset.tracksWithMediaType(AVMediaTypeVideo).first!
let assetReader = try! AVAssetReader(asset: self)
let assetReaderOutputSettings = [
    kCVPixelBufferPixelFormatTypeKey as String: NSNumber(unsignedInt: kCVPixelFormatType_32BGRA)
]
let assetReaderOutput = AVAssetReaderTrackOutput(track: assetTrack, outputSettings: assetReaderOutputSettings)
assetReaderOutput.alwaysCopiesSampleData = false
assetReader.addOutput(assetReaderOutput)
assetReader.startReading()

var frameCount = 0
var sample: CMSampleBufferRef? = assetReaderOutput.copyNextSampleBuffer()

while (sample != nil) {
    frameCount++
    sample = assetReaderOutput.copyNextSampleBuffer()
}

// now you have frame count
print(frameCount)
于 2016-01-15T03:12:03.050 に答える