すべてのフレームをデコードせずに、開いたばかりのビデオのフレーム数を見つけようとしています。
で開き、ビデオAVAsset
の を取得します。AVAssetTrack
次は何 ?
すべてのフレームをデコードせずに、開いたばかりのビデオのフレーム数を見つけようとしています。
で開き、ビデオAVAsset
の を取得します。AVAssetTrack
次は何 ?
これを行うための比較的高価な方法の 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)