【问题标题】:Creating thumbnail from video - choosing the image to be used during preview从视频创建缩略图 - 选择要在预览期间使用的图像
【发布时间】:2011-03-17 04:46:35
【问题描述】:

使用选择器从视频中制作缩略图非常简单。但是,当我在选择器中按 PLAY 然后选择视频时,我的缩略图总是黑色的。我希望它能截取屏幕截图 - 但是这种方法只拍摄视频的第一张图片 - 并且只有在它没有被播放的情况下!

如何在视频的任意位置制作缩略图?

这是我用于缩略图的“正常”代码,其中视频尚未播放:

- (void) mediaPicker: (MPMediaPickerController *) mediaPicker didPickMediaItems: (MPMediaItemCollection *) mediaItemCollection {

    CGSize size = viewImage.size;
    CGFloat ratio = 0;
    if (size.width > size.height) {
        ratio = 80.0 / size.width;
    } else {
        ratio = 80.0 / size.height;
    }
    CGRect rectForthumbnail = CGRectMake(0.0, 0.0, ratio * size.width, ratio * size.height);

    UIGraphicsBeginImageContext(rectForthumbnail.size);

    CGRect clipRect = CGRectMake(0.0, 0.0,74,74);
    [viewImage drawInRect:clipRect];
    dance.thumbnailImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

不幸的是,在按下“PLAY”后,创建的缩略图是黑色的(仅显示 iphone 屏幕的顶部,其中显示视频滚动和当前播放位置),剩余的缩略图始终是黑色的。如前所述,在其他情况下效果很好。

非常感谢!

【问题讨论】:

  • 嗨 geforce,您能否也将其作为答案(不仅仅是评论),以便我可以检查它是否已解决 - 我确定这就是我正在寻找的......

标签: iphone xcode video thumbnails preview


【解决方案1】:

检查 MPMoviePlayerController 独库:link。有一个返回 UIImage 的“thumbnailImageAtTime:timeOption:”函数。希望对您有所帮助

【讨论】:

    【解决方案2】:

    如果你使用的是 MPMoviePlayerController,你可以试试这个

    - (void)getThumbnailImage
    {
    UIImage *thumbnailImage = [player thumbnailImageAtTime:player.currentPlaybackTime timeOption:MPMovieTimeOptionExact];
    }
    

    【讨论】:

      【解决方案3】:

      如果你正在使用 MPMoviePlayer,你可以使用MPMoviePlayerController thumbnailImageAtTime:timeOption 方法。

      -(UIImage *)thumbnailImageFromVideo:(NSString *)videoPath
      {
         NSURL *videoURL = [NSURL fileURLWithPath:videoPath];
         MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:videoURL];
         UIImage *thumbnailImage = [player thumbnailImageAtTime:1.0 timeOption:MPMovieTimeOptionNearestKeyFrame];
      
         //Player autoplays audio on init
         [player stop];
         return thumbnailImage;
      }
      

      或者您可以使用以下方法从视频中手动获取缩略图 -

      -(UIImage *)thumbnailCreationForVideo:(NSString *)videoPath
       {
         NSURL *videoURL = [[NSURL alloc] initFileURLWithPath:videoPath];
         AVURLAsset *myAsset = [[AVURLAsset alloc] initWithURL:videoURL options:nil];
         AVAssetImageGenerator *generate = [[AVAssetImageGenerator alloc] initWithAsset:myAsset];
         NSError *err = NULL;
         Float64 durationSeconds = CMTimeGetSeconds([myAsset duration]);
         CMTime midpoint = CMTimeMakeWithSeconds(durationSeconds/2.0, 600);
         CGImageRef imgRef = [generate copyCGImageAtTime:midpoint actualTime:NULL error:&err];
         UIImage *thumbnailImage = [[UIImage alloc] initWithCGImage:imgRef];
         return thumbnailImage;
      }
      

      【讨论】:

        猜你喜欢
        • 2011-11-04
        • 1970-01-01
        • 2011-01-16
        • 2017-09-03
        • 2017-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-13
        相关资源
        最近更新 更多