gpt4 book ai didi

macos - AVAssetWriter 帧率略有下降

转载 作者:行者123 更新时间:2023-11-28 21:41:24 30 4
gpt4 key购买 nike

我正在尝试使用 OSX AVAsset 类从电影文件中读取视频帧,调整颜色,然后将它们写出到新的电影文件中。我已经完成了所有工作,除了出于某种奇怪的原因,当我正在阅读以每秒 29.97 帧播放的视频时(根据 Final Cut Pro X 中的检查员的说法),输出视频被列为 30 帧每秒甚至。这种微小的差异以及其他问题使我无法在 Final Cut 项目中交换这两个视频文件。

我在编写/编码时使用来自解码/输入帧的准确时间信息。下面是相关代码。

读取/解码帧时:

CMSampleBufferRef videoSampleBuffer = [assetReaderVideoOutput copyNextSampleBuffer];  
if (videoSampleBuffer == NULL)
return false;

CMSampleTimingInfo myTiming;
CMSampleBufferGetSampleTimingInfo(videoSampleBuffer, 0, &myTiming);
frameInfo->frameTimeValue = myTiming.presentationTimeStamp.value;
frameInfo->frameTimeScale = myTiming.presentationTimeStamp.timescale;

编写/编码修改后的帧时:

CMTime myTime = CMTimeMake(frameInfo->frameTimeValue, frameInfo->frameTimeScale);  
[pixelBufferAdapter appendPixelBuffer:pixelsBuffer withPresentationTime:myTime];

想法?时间尺度值似乎表明视频应该以 29.97 fps 编码(它的 frameTimeValue 值为 1001 和 2002,等等,frameTimeScale 为 30000)。即使我手动将每帧的 frameTimeValue 增加 1030 而不是 1001,它仍然会将视频固定为 30 fps。一旦我将它调到 1050 左右,我就开始获得 28.75 左右的准确帧率或任何结果。

最佳答案

发现问题 - 在添加任何帧之前,您必须手动设置 AVAssetWriterInput 的时间标度。否则,它假定的时间尺度可能与您添加的帧的时间尺度不兼容,从而导致舍入错误并创建错误的帧速率。

assetWriterInputVideo.mediaTimeScale = 30000;

关于macos - AVAssetWriter 帧率略有下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31980851/

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