7

我想获取特定视频的帧速率。我试图查看 AVURLAsset 或 AVAssetReader 中的AVFoundationAPI AssetsLibrary。它们都没有真正的帮助。有谁知道苹果框架/库中获取帧速率的方法

4

3 回答 3

9

更简单的选择是获取 AVAssetTrack 并读取它的nominalFrameRate 属性。看起来可以帮助你。

标称帧速率是轨道的帧速率,以每秒帧数为单位。(只读) AVAssetTrack 类 @property(nonatomic, readonly) 浮动标称帧率

于 2012-06-21T12:56:54.347 回答
4

对于 iOS 7+,您可以使用 AVPlayerItemTrack 的 currentVideoFrameRate 属性。它是我见过的唯一一致的属性来衡量 FPS。在 HLS 流中,nominalFrameRate 属性似乎被破坏了。

AVPlayerItem *item = AVPlayer.currentItem; // Your current item
float fps = 0.00;
for (AVPlayerItemTrack *track in item.tracks) {
    if ([track.assetTrack.mediaType isEqualToString:AVMediaTypeVideo]) {
        fps = track.currentVideoFrameRate;
    }
}
于 2015-04-06T18:56:45.960 回答
1

对于属性currentVideoFrameRate,来自 Apple 的文档

如果项目没有播放,或者轨道的媒体类型不是视频,则此属性的值为 0.0。

它要求该项目处于“播放”状态,因此我nominalFrameRate改为使用。

它仍然适用于 iOS 12,swift 4:

let tracks = asset.tracks(withMediaType: .video)

let fps = tracks?.first?.nominalFrameRate

请记住处理 nil 检查。

于 2018-09-24T05:46:41.477 回答