iOS:如何修复使用 AVAssetWriter 保存电影的半尺寸帧

发布于 2024-10-15 20:39:18 字数 245 浏览 7 评论 0原文

我正在使用 AVAssetWriter 和 AVAssetWriterInputPixelBufferAdaptor 编写电影文件。

用于构建 CVPixelBuffer 的 CGImage 看起来很正常(如屏幕上显示的那样),输出影片显示压缩到帧上半部分的输入图像。所有宽度、高度和 bytes_per_row 都是相同的(对于 CGImage、AVAssetWriter 设置和 CVPixelBuffer 设置)。

什么可能导致这种问题?

I am writing a movie file with AVAssetWriter and AVAssetWriterInputPixelBufferAdaptor.

The CGImage that is used to build the CVPixelBuffer looks normal (as displayed on the screen), the output movie shows the input image compressed into the top half of the frame. All of the widths, heights, and bytes_per_row are identical (for the CGImage, the AVAssetWriter settings, and the CVPixelBuffer settings).

What could be causing this kind of problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

烟织青萝梦 2024-10-22 20:39:18

问题来自于这样一个事实:当您向 AVAssetWriterInputPixelBufferAdaptor 提供设置以用于配置 CVPixelBufferPool 以生成 CVPixelBuffers 时,CVPixelBufferPool 显然将这些设置用作请求而不是实际设置。您获得的 CVPixelBuffer 可能具有不同的配置。我不确定这可能是苹果代码中的一个错误。

在任何情况下,您都可以使用 CVPixelBufferGetBytesPerRow(CVPixelBuffer) 读取每行的实际字节,并相应地调整您的代码。为我工作!

The problem comes from the fact that when you supply settings to AVAssetWriterInputPixelBufferAdaptor for use in configuring the CVPixelBufferPool to generate CVPixelBuffers, the CVPixelBufferPool apparently uses the settings as a request rather than as the actual setting. The CVPixelBuffer you get may have a different configuration. This might be a bug in Apple's code, I'm not sure.

In any case you can read the actual bytes per row using CVPixelBufferGetBytesPerRow(CVPixelBuffer), and adjust your code accordingly. Worked for me!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文