gpt4 book ai didi

ios - 使用 AVAssetWriter 重新编码 H264 mov 文件 - 如何设置帧率?

转载 作者:可可西里 更新时间:2023-11-01 06:01:32 26 4
gpt4 key购买 nike

我正在尝试在 iOS 中重新编码具有可变帧速率和剪裁持续时间的输入 MOV 文件。目前我有一个 AVAssetWriter 设置视频属性有点像这样:

NSMutableDictionary* compressionPropertiesDict = [NSMutableDictionary new];
compressionPropertiesDict[AVVideoProfileLevelKey] = AVVideoProfileLevelH264High40;

if(self.fps > 0) {
compressionPropertiesDict[AVVideoAverageNonDroppableFrameRateKey] = [NSNumber numberWithInt:self.fps];


_sessionMgr.videoSettings = @
{
AVVideoCodecKey: AVVideoCodecH264,
AVVideoWidthKey: [NSNumber numberWithFloat:self.outputSize.width],
AVVideoHeightKey: [NSNumber numberWithFloat:self.outputSize.height],
AVVideoCompressionPropertiesKey: compressionPropertiesDict,
};

运行时的输出看起来像这样:

videoSettings = 
{
AVVideoCodecKey = avc1;
AVVideoCompressionPropertiesKey = {
AverageNonDroppableFrameRate = 15;
ProfileLevel = "H264_High_4_0";
};
AVVideoHeightKey = 960;
AVVideoWidthKey = 640;
}

最后,我遇到了 NSInvalidArgumentException 崩溃:
“视频编解码器类型 avc1 不支持压缩属性 AverageNonDroppableFrameRate”
。 (在使用模拟器的单元测试中。)

iOS 中只有一种可用的编解码器类型,AVVideoCodecH264/"avc1"- 我注意到其他项目使用了 AVVideoAverageNonDroppableFrameRateKey。事实上,我正在使用 SDAVAssetExportSession在那个代码库中,我看到了这个键的明确使用。所以我想一定有一种方法可以使用这个键来设置帧率..?

我也尝试过使用 AVVideoMaxKeyFrameIntervalKey 来代替,但这根本不会改变我的帧速率...

因此,总而言之,任何人都可以帮助我为基于 iOS AVFoundation 的视频转换设置不同的(总是较低的)输出帧率吗?谢谢!

最佳答案

如问题中所述,我使用了 SDAVAssetExportSession为了便于视频导出。我对它做了一些小改动,使我能够轻松地使用它来更改帧速率。

主要要点是您可以使用 AVMutableVideoComposition 更改帧率,将 frameDuration 属性设置为所需的帧率,并将此合成对象传递给 AVAssetReaderVideoCompositionOutput 转码中使用的对象。

在 SDAVAssetExportSession 的 buildDefaultVideoComposition 方法中,我将其修改为如下所示:

- (AVMutableVideoComposition *)buildDefaultVideoComposition
{
AVMutableVideoComposition *videoComposition = [AVMutableVideoComposition videoComposition];
AVAssetTrack *videoTrack = [[self.asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];

// ...

videoComposition.frameDuration = CMTimeMake(1, myDesiredFramerate);

// ...

成功了。

关于ios - 使用 AVAssetWriter 重新编码 H264 mov 文件 - 如何设置帧率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44001641/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com