web-dev-qa-db-fra.com

Obtenez la durée précise d'une vidéo

Je fais un lecteur et je veux lister tous les fichiers et devant tous les fichiers je veux présenter la durée de la vidéo.

Le seul problème est que je n'obtiens pas la bonne durée vidéo, parfois elle renvoie une durée complètement fausse.

J'ai essayé la solution ci-dessous:

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

let duration = asset.duration.seconds

Pour que ça, le temps donne parfois une valeur parfois une autre. si quelqu'un connaît une solution possible, je suis heureux d'entendre.

J'ai mis à jour le code en utilisant une solution possible mais cela n'a pas bien fonctionné,

let asset = AVAsset(url: url)

let duration = asset.duration

let durationTime = CMTimeGetSeconds(duration)

let minutes = Double(durationTime / 60)

J'ai essayé avec une vidéo d'une durée de 11:47 minutes et cela me renvoie = 11:78, comment une vidéo peut-elle avoir 11 minutes et 78 secondes?

Je pense donc que le problème est avec la vidéo, et j'ai choisi une autre vidéo de 1:16 minutes et encore une fois la valeur renvoyée est 1:26 (10 secondes erronées)

16
Mr. James

Cela fonctionne pour moi:

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)
    }

Pour la vidéo ici il imprime "5.568" ce qui est correct.

Modifier à partir des commentaires:

Une vidéo qui renvoie 707 secondes lorsqu'il est divisé par 60 sec/min est 11.78. Cela fait 11,78 minutes, ou 11 minutes et 0.78min * 60sec/min = 47sec, le total est 11 min 47 sec

25
David S.