【问题标题】:AVAssetImageGenerator - Generate thumbnail at 5 secondsAVAssetImageGenerator - 在 5 秒时生成缩略图
【发布时间】:2017-01-21 15:00:37
【问题描述】:

看起来很简单。我只想要视频 5 秒后的缩略图:

AVURLAsset *asset1 = [[AVURLAsset alloc] initWithURL:[NSURL URLWithString:url] options:nil];
AVAssetImageGenerator *generate1 = [[AVAssetImageGenerator alloc] initWithAsset:asset1];
generate1.appliesPreferredTrackTransform = YES;
NSError *err = NULL;
Float64 seconds = 5;
int32_t preferredTimeScale = 30;
CMTime actualTime;
CMTime inTime = CMTimeMakeWithSeconds(seconds, preferredTimeScale);
CMTimeShow(inTime);
CGImageRef oneRef = [generate1 copyCGImageAtTime:inTime actualTime:&actualTime error:&err];

输出是这样的:

Printing description of actualTime:
(CMTime) actualTime = 83 1000ths of a second {
  value = 83
  timescale = 1000
  flags = kCMTimeFlags_Valid
  epoch = 0
}
Printing description of inTime:
(CMTime) inTime = 150 30ths of a second {
  value = 150
  timescale = 30
  flags = kCMTimeFlags_Valid
  epoch = 0
}

为什么actualTimeinTime 不同???如何在视频中获得 5 秒的图像?

【问题讨论】:

  • 你确定视频不会太短吗?
  • 是的,视频时长 3 分钟。
  • 能否请您在帖子中添加asset1.duration 值?
  • CMTimeGetSeconds(asset1.duration) 记录此:duration: 180.203000
  • 那么图片真的错了吗?您的视频可能帧速率极低。

标签: ios avfoundation avasset avassetimagegenerator


【解决方案1】:

尝试使用requestedTimeToleranceBeforerequestedTimeToleranceAfter

generate1.requestedTimeToleranceBefore = kCMTimeZero
generate1.requestedTimeToleranceAfter = kCMTimeZero

var requestedTimeToleranceBefore: CMTime

图像在请求时间之前的最大时间长度 可能会生成。

var requestedTimeToleranceAfter: CMTime

图像在请求时间之后的最长时间 可能会生成。

【讨论】:

  • 这没有帮助:Printing description of actualTime: (CMTime) actualTime = { value = 6143422688 timescale = 0 flags = 0 epoch = 4320052688 }
猜你喜欢
  • 1970-01-01
  • 2014-07-11
  • 1970-01-01
  • 2011-04-05
  • 2013-11-23
  • 1970-01-01
  • 1970-01-01
  • 2015-08-24
  • 2010-12-31
相关资源
最近更新 更多