作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 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/
直接问题:对于一个类对象的三个(或更多)几乎相同的拷贝,我怎样才能最好(或最有效)地存储它们之间的差异? 背景:我有一个需要一组参数的算法: struct params { std::strin
我是一名优秀的程序员,十分优秀!