获取视频的准确时长

Get the accurate duration of a video

我正在制作一个播放器,我想列出所有文件,并在所有文件前面显示视频的时长。

唯一的问题是我没有得到正确的视频时长,有时 return 时长完全错误。

我尝试了以下解决方案:

let asset = AVAsset(url: "video.mp4")

let duration = asset.duration.seconds

所以呢,时间有时候给一个值有时候给另外一个。 如果有人知道可能的解决方案,我很高兴听到。

我已经使用一种可能的解决方案更新了代码,但效果不佳,

let asset = AVAsset(url: url)

let duration = asset.duration

let durationTime = CMTimeGetSeconds(duration)

let minutes = Double(durationTime / 60)

我试过一个时长 11:47 分钟的视频,它 return 是我 = 11:78,一个视频怎么会有 11 分 78 秒?

所以我认为问题出在视频上,我选择了另一个 1:16 分钟的视频,returned 值再次为 1:26(错误 10 秒)

这对我有用:

import AVFoundation
import CoreMedia

...

    if let url = Bundle.main.url(forResource: "small", withExtension: "mp4") {
        let asset = AVAsset(url: url)

        let duration = asset.duration
        let durationTime = CMTimeGetSeconds(duration)

        print(durationTime)
    }

对于视频 here 它打印正确的“5.568”。

根据评论编辑:

returns 707 秒除以 60 sec/min 的视频是 11.78。这是 11.78 分钟,或 11 分钟 0.78min * 60sec/min = 47sec,总计 11 min 47 sec

if let url = Bundle.main.url(forResource: "small", withExtension: "mp4") {
        let asset = AVAsset(url: url)

        let duration = asset.duration
        let durationTime = CMTimeGetSeconds(duration)
        let minutes = durationTime/60
        let seconds = durationTime%60
        let videoDuration = "\(minutes):\(seconds)"
        print(videoDuration)
    }