22

私の英語で申し訳ありません) iPhone でビデオからの読み取りフレームに関する情報を探していると、このプロジェクトを見つけました。 -1116ですが、パフォーマンスを向上させるために、AVFoundation を使用してビデオからフレームをキャプチャできることもどこかで読みました..

しかし、私はそれを行う方法の情報を見つけることができません...

アイデア?

読んでくれてありがとう

4

5 に答える 5

37

Apple が特定の時間にビデオからサムネイル画像と呼ぶものを生成するための呼び出しを使用することについて話している。

MPMoviePlayerController (iOS がファイルまたは他のソースからのビデオを保持するために使用するもの) の場合、これを行うための 2 つのコマンドがあります。1 つ目は特定の時点のムービーから 1 つのサムネイル (画像) を生成し、2 つ目は時間範囲の一連のサムネイルを生成します。

この例では、10 秒の画像をムービー クリップmyMovie.mp4に取得します。

MPMoviePlayerController *movie = [[MPMoviePlayerController alloc]
        initWithContentURL:[NSURL URLWithString:@"myMovie.mp4"]];
UIImage *singleFrameImage = [movie thumbnailImageAtTime:10 
        timeOption:MPMovieTimeOptionExact];

これは同期的に実行されることに注意してください。つまり、ユーザーはスクリーンショットを取得するまで待機する必要があります。

もう 1 つのオプションは、一連の時間の配列から、ムービーから一連の画像を取得することです。

MPMoviePlayerController *movie = [[MPMoviePlayerController alloc]
        initWithContentURL [NSURL URLWithString:@"myMovie.mp4"]];
NSNumber time1 = 10;
NSNumber time2 = 11;
NSNumber time3 = 12;
NSArray *times = [NSArray arrayWithObjects:time1,time2,time3,nil];
[movie requestThumbnailImagesAtTimes:times timeOption:MPMovieTimeOptionExact];

MPMoviePlayerThumbnailImageRequestDidFinishNotificationこの 2 番目の方法では、新しいイメージが生成されるたびにタイプの通知がトリガーされます。これを監視して画像を処理するオブザーバーを設定することができます。

于 2010-11-16T23:09:24.360 に答える
19

AVAssetImageGenerator、具体的には generateCGImagesAsynchronouslyForTimes:completionHandlerを試すこともできます。

This SO answerには良いサンプルコードがあります。

于 2010-11-18T09:14:37.497 に答える
7

AVAssetImageGenerator でフレームを取得する Swift 2 コード:

func previewImageForLocalVideo(url:NSURL) -> UIImage?
{
    let asset = AVAsset(URL: url)
    let imageGenerator = AVAssetImageGenerator(asset: asset)
    imageGenerator.appliesPreferredTrackTransform = true

    var time = asset.duration
    //If possible - take not the first frame (it could be completely black or white on camara's videos)
    time.value = min(time.value, 2)

    do {
        let imageRef = try imageGenerator.copyCGImageAtTime(time, actualTime: nil)
        return UIImage(CGImage: imageRef)
    }
    catch let error as NSError
    {
        print("Image generation failed with error \(error)")
        return nil
    }
}
于 2015-10-27T14:11:32.230 に答える