【发布时间】:2017-08-15 22:30:35
【问题描述】:
我正在从一堆静止图像中创建一个视频(QuickTime .mov 格式,H.264 编码),并且我想在此过程中添加一个章节轨道。视频制作良好,我没有检测到任何错误,但 QuickTime Player 没有显示任何章节。我知道this question,但它不能解决我的问题。
旧版 QuickTime Player 7 与最近的版本不同,它可以显示有关电影曲目的信息。当我打开带有工作章节的电影(使用旧的 QuickTime 代码创建)时,我看到一个视频轨道和一个文本轨道,并且视频轨道知道文本轨道正在为视频提供章节。然而,如果我检查由我的新代码创建的电影,则会有一个元数据轨道和视频轨道,但 QuickTime 不知道元数据轨道应该提供章节。我读过的东西让我相信应该为章节使用元数据,但有没有人真正做到这一点?文本轨道有用吗?
以下是我为元数据创建 AVAssetWriterInput 的方法。
// Make dummy AVMetadataItem to get its format
AVMutableMetadataItem* dummyMetaItem = [AVMutableMetadataItem metadataItem];
dummyMetaItem.identifier = AVMetadataIdentifierQuickTimeUserDataChapter;
dummyMetaItem.dataType = (NSString*) kCMMetadataBaseDataType_UTF8;
dummyMetaItem.value = @"foo";
AVTimedMetadataGroup* dummyGroup = [[[AVTimedMetadataGroup alloc]
initWithItems: @[dummyMetaItem]
timeRange: CMTimeRangeMake( kCMTimeZero, kCMTimeInvalid )] autorelease];
CMMetadataFormatDescriptionRef metaFmt = [dummyGroup copyFormatDescription];
// Make the input
AVAssetWriterInput* metaWriterInput = [AVAssetWriterInput
assetWriterInputWithMediaType: AVMediaTypeMetadata
outputSettings: nil
sourceFormatHint: metaFmt];
CFRelease( metaFmt );
// Associate metadata input with video input
[videoInput addTrackAssociationWithTrackOfInput: metaWriterInput
type: AVTrackAssociationTypeChapterList];
// Associate metadata input with AVAssetWriter
[writer addInput: metaWriterInput];
// Create a metadata adaptor
AVAssetWriterInputMetadataAdaptor* metaAdaptor = [AVAssetWriterInputMetadataAdaptor
assetWriterInputMetadataAdaptorWithAssetWriterInput: metaWriterInput];
附:我尝试改用文本轨道(AVMediaTypeText 类型的 AVAssetWriterInput),QuickTime Player 说结果“不是电影”。不知道我做错了什么。
【问题讨论】:
标签: macos video avfoundation metadata