objective-c - AVAssetImageGenerator copyCGImageAtTime:actualTime:error: 从 10 位视频生成 8 位图像
问题描述
我的 Mac 上有一个 10 位视频,我想提取完整的 10 位/通道数据中的帧。我加载我的资产,并验证它是 10 位的:
CMFormatDescriptionRef formatDescriptions = (__bridge CMFormatDescriptionRef)(track.formatDescriptions[0]);
float frameRate = track.nominalFrameRate;
int bitDepth = ((NSNumber*)CMFormatDescriptionGetExtension(formatDescriptions, (__bridge CFStringRef)@"BitsPerComponent")).intValue;
bitDepth
许多视频是 8,但这个视频是 10(我知道我无论如何都是以 10 位录制的),因此AVFoundation
可以正确识别通道位深度。
AVAssetImageGenerator
但是,我想使用'scopyCGImageAtTime:actualTime:error:
方法从视频中生成单帧:
NSError *err;
NSImage *img = [[NSImage alloc] initWithCGImage:[imageGenerator copyCGImageAtTime:time actualTime:NULL error:&err] size:dimensions];
图像成功生成,没有错误,但是当我检查它时,我发现它是 8 位/通道:
(lldb) po img
<NSImage 0x600001793f80 Size={3840, 2160} Reps=(
"<NSCGImageSnapshotRep:0x6000017a5a40 cgImage=<CGImage 0x100520800>
(DP)\n\t<<CGColorSpace 0x60000261ae80> (kCGColorSpaceICCBased;
kCGColorSpaceModelRGB; Composite NTSC)>\n\t\twidth = 3840, height = 2160,
bpc = 8, bpp = 32, row bytes = 15360
\n\t\tkCGImageAlphaPremultipliedFirst | kCGImageByteOrder32Big |
kCGImagePixelFormatPacked \n\t\tis mask? No, has masking color? No,
has soft mask? No, has matte? No, should interpolate? Yes>"
)>
如何从 10 位视频生成完整、无损的 10 位(或为了兼容性,16 位或 32 位)帧?
我在 macOS 10.14 上。
解决方案
由于缺乏这方面的任何信息,我已经放弃AVAssetImageGenerator
并继续嵌入ffmpeg
我的应用程序并调用它来提取 10 位帧。
推荐阅读
- javascript - Select2 ajax:在编辑模式下预选数据
- nginx - 在 Google Compute Cloud 上设置 Xdebug
- java - 是否可以有 2 个 UserDetailsService(每个 WebSecurityConfigurerAdapter 一个)?
- python - /google-cloud-sdk/platform/google_appengine/appcfg.py download_app 未下载所有项目文件和文件夹
- c# - AADSTS70011:为输入参数“范围”提供的值无效
- xamarin - 如何为 Xamarin Forms 模板制作 ViewModel?
- python - 循环并提取子字符串
- ios - 3D Touch:UICollectionViewCell 中的 registerForPreviewing
- python - 如何在线性时间内根据键重新组合列表列表?
- python - 根据列值检索熊猫数据帧的过去 n 条记录