问题标签 [avvideocomposition]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
359 浏览

swift - 在预览和导出时将纵向视频转换为 aspectFit

我一直在尝试让肖像视频转换为可以在播放器中心放置的方面,同时保持屏幕的其余部分为空。

视频的外观示例

这里是代码: 几件事: self.videoRenderSize = CGSize(width: 1920.0, height: 1080.0) videoTrackSize 可能是 (960,720), (1280,720), (1920,1080) (虽然全是纵向,所以宽度是高度和反之亦然)

isVideoPortrait 函数的代码

什么是转换层指令,用于确保视频将在中心转换并可以像上面附加的图像一样放置。

0 投票
2 回答
1157 浏览

avfoundation - 如何访问 AVAsynchronousCIImageFilteringRequest 中的帧号?

使用 aCIFilter和 anAVVideoComposition时,如何在AVAsynchronousCIImageFilteringRequest回调中访问当前帧号?

我能做的最好的就是估计当时的帧数:

但这对我来说还不够准确。有没有办法访问帧号?

0 投票
1 回答
139 浏览

ios - 使用 CoreAnimations 渲染 CALayers

如何将具有大量动画的 CALayer 渲染到 mov 文件?

我知道如何渲染它,AVVideoCompositionCoreAnimationTool videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer但因此我需要一个虚拟视频(我有一个 1x1px),但我想知道如何在没有 mp3/mov 的情况下做到这一点,所以只需将 CALayer 渲染到没有任何其他资源的视频。

有任何想法吗?甚至可能是代码示例?

0 投票
2 回答
4397 浏览

ios - 自定义 AVVideoCompositing 类未按预期工作

我正在尝试将 CIFilter 应用于 AVAsset,然后将其与应用的过滤器一起保存。我这样做的方式是使用AVAssetExportSession带有自定义类videoComposition的对象。AVMutableVideoCompositionAVVideoCompositing

我还将instructions我的AVMutableVideoComposition对象设置为自定义组合指令类(符合AVMutableVideoCompositionInstruction)。这个类被传递了一个轨道 ID,以及一些其他不重要的变量。

不幸的是,我遇到了一个问题——startVideoCompositionRequest:我的自定义视频合成器类(符合AVVideoCompositing)中的函数没有被正确调用。

当我将passthroughTrackID自定义指令类的变量设置为轨道 ID 时,startVideoCompositionRequest(request)我的函数AVVideoCompositing不会被调用。

然而,当我没有设置passthroughTrackID自定义指令类的变量时,startVideoCompositionRequest(request) 调用,但不正确 - 打印request.sourceTrackIDs会导致空数组,并request.sourceFrameByTrackID(trackID)导致 nil 值。

我发现有趣的是,cancelAllPendingVideoCompositionRequests:在尝试使用过滤器导出视频时,该函数总是被调用两次。它要么在之前和之后调用一次,要么在未调用startVideoCompositionRequest:的情况下连续调用两次。startVideoCompositionRequest:

我创建了三个用于导出带有过滤器的视频的类。这是实用程序类,它基本上只包含一个export函数并调用所有必需的代码

这是另外两个类 - 我会将它们放在一个代码块中以使这篇文章更短

我一直在查看Apple 的 AVCustomEdit 示例项目以获取相关指导,但我似乎无法在其中找到发生这种情况的任何原因。

我怎样才能让request.sourceFrameByTrackID:函数正确调用,并CVPixelBuffer为每一帧提供一个有效的?

0 投票
3 回答
11846 浏览

ios - Swift 3:如何在视频上添加水印?AVVideoCompositionCoreAnimationTool iOS 10 问题

此代码用于在 iOS9 上为视频添加水印和文本,但自 iOS10 以来它不再工作了。有一个iOS 10 错误已提交,但 Apple 没有答复。我无法实施任何解决方法来在视频上添加水印和文本。使用此代码,有时视频会成功导出,但大多数时候不会导出。

我应该如何使用AVVideoCompositionCoreAnimationTool它才能像在 iOS9 上一样工作。

请注意:如果我删除AVVideoCompositionCoreAnimationTool视频,则始终会导出视频,但这没有视频上的水印和文字。如何使其工作AVVideoCompositionCoreAnimationTool不与冲突AVAssetExportSession

有些人已经使用和协议实现了解决方法,但与过去的工作方式相比,这似乎是一个繁重的解决方法。customVideoCompositorClassAVVideoCompositing

0 投票
1 回答
2980 浏览

ios - AVPlayer 播放视频合成结果不正确

我需要一个简单的东西:一边旋转一边播放视频并应用CIFilter它。

首先,我创建播放器项目:

然后我需要应用视频合成。最初,我想创建一个AVVideoComposition带有 2 条指令的指令 - 一条AVVideoCompositionLayerInstruction用于轮换,另一条用于CIFilter应用。但是,我收到一个异常,说“期望视频合成仅包含 AVCoreImageFilterVideoCompositionInstruction”,这意味着 Apple 不允许组合这 2 个指令。结果,我在过滤下结合了两者,这里是代码:

我在调试期间制作的屏幕截图显示图像已成功旋转并应用了过滤器(在此示例中,它是一个不改变图像的身份过滤器)。这是在上面评论中标记的点拍摄的屏幕截图 1 和屏幕截图 2:

在此处输入图像描述

在此处输入图像描述

如您所见,旋转成功,生成的帧的范围也是正确的。

当我尝试在播放器中播放此视频时,问题就开始了。这是我得到的:

在此处输入图像描述

所以似乎所有的帧都按比例缩小并向下移动。绿色区域是空帧信息,当我夹紧到范围以使帧无限大小时,它显示边框像素而不是绿色。我有一种感觉,玩家在旋转之前仍然会从AVPlayerItem.

播放器设置如下:

请注意最重要的事情:这只发生在应用程序本身使用相机以横向iPhone [6s] 方向录制并之前保存在设备存储中的视频。该应用程序以纵向模式录制的视频完全没有问题(顺便说一句,纵向视频的大小和转换日志就像横向视频一样!奇怪......也许iphone将旋转信息放入视频并修复它)。因此,缩放和移动视频似乎是“方面填充”和旋转前旧分辨率信息的组合。顺便说一句,纵向视频帧的显示部分是因为缩放以填充具有不同纵横比的播放器区域,但这是预期的行为。

让我知道您对此的想法,如果您知道如何实现我需要的更好的方法,那么很高兴知道。

0 投票
0 回答
839 浏览

avfoundation - AVAssetExportSession 的性能(太慢了)

最近,我使用 AVFoundation 框架为我的视频添加水印,然后通过 AVAssetExportSession 导出新视频。下面的链接显示了方法和详细信息。 https://developer.apple.com/library/content/documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/03_Editing.html#//apple_ref/doc/uid/TP40010188-CH8-SW1

但是出口速度太慢了。在 iPhone 6sp 中导出 1 分钟长度的水印视频大约需要 20 秒。有谁知道如何快速导出?

PS:我尝试在 AVAssetExportSession 中使用预设的 AVAssetExportPresetPassThrough。它花费的时间更短,但我的水印不见了。

0 投票
0 回答
423 浏览

ios - 从ios中的视频中裁剪指定的CGRect

我想从我的视频文件中裁剪 CGRect 的指定区域。我遵循了本教程

我正在使用renderSize属性AVMutableVideoComposition来达到指定的大小。这是我用来将视频裁剪为指定大小的代码。

我的原始视频看起来像这样。图片

我申请后的视频renderSize看起来AVMutableVideoComposition像这样。图片

正如我们所见,底部已成功从原始视频中剪掉。

假设我有一个大小的视频,(1000,1000)我只想要该视频的中心部分(500,500)区域。所以我CGrect会的(0,250,500,500)。在我的情况下,我只想要图像存在的区域,所以我想裁剪顶部栏和底部栏。

所以我申请CGAffineTransformAVMutableVideoCompositionLayerInstruction这样的

结果如下图所示。

图片

那么如何(x,y)在裁剪视频时应用此值以及我在这里做错了什么。我将不胜感激任何帮助。

0 投票
1 回答
743 浏览

ios - IOS 视频 over video 与圆形裁剪合并

我正在制作一个进行基本视频处理的应用程序。我已经成功地合并到视频(视频上的视频)。 在此处输入图像描述 如何将左上角的小视频裁剪成一个圆圈?

0 投票
5 回答
6207 浏览

ios - 应用 AVVideoComposition 后旋转的视频

应用AVVideoComposition到 my后AVPlayerItem,我应用的过滤器确实有效,但视频在AVPlayerLayer.

我知道问题不在于过滤后的帧,因为如果我在 a 中显示帧UIImageView,则该帧会 100% 正确呈现。

在我应用. videoComposition设置videoGravityonAVPlayerLayer无济于事。

视频顺时针旋转 90º 并在图层中拉伸。

本质上,视频AVPlayerLayerAVPlayerItem通过AVMutableVideoComposition. 一旦发生这种情况,视频将旋转 -90º,然后缩放以适应与过滤前的视频相同的尺寸。这表明它没有意识到它的变换已经正确,因此它正在对自身重新应用变换。

为什么会发生这种情况,我该如何解决?

这是一些代码: