问题标签 [avcomposition]
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.
ios - Equal-Power Crossfade in AVMutableVideoCompositionLayerInstruction
How can I get an equal-power crossfade working in an AVVideoComposition
? I'm using something like the following to fade between video tracks, but when looping the same video over and over there is a very noticeable brightness dip during the transition due to whatever curve is being used internally in setOpacityRamp
.
ios - 使用文本层导出视频时 AVFoundation 崩溃
我在业余时间为 iOS 开发一个视频编辑应用程序。
在参加其他项目几周后,我刚刚恢复了它的工作,并且 - 即使我没有对代码进行任何重大更改 -现在每次我尝试导出我的视频作品时它都会崩溃。
我检查并构建了与我当时成功上传到 TestFlight 完全相同的提交(并且它在多个设备上工作而没有崩溃),所以也许这是我从那时起更新的最新 Xcode / iOS SDK 的问题?
代码在线程上的_xpc_api_misuse上崩溃:
调试导航器:
崩溃时,调试导航器上有 70 多个线程,所以可能是出了点问题,应用程序使用了太多线程(从未见过这么多)。
我的应用程序使用文本层在导出的视频上叠加了“水印”。玩了一圈,发现注释掉水印代码可以避免崩溃:
水印层的代码是:
任何想法可能会发生什么?
也许我的代码做错了什么,在以前的 SDK 中以某种方式“通过”,因为某些 Apple 错误已得到修复或实现“漏洞”被堵塞?
更新:我下载了Ray Wenderlich 的视频编辑示例项目,并尝试为视频添加“字幕”(我不得不调整太旧的项目,以便它可以在 Xcode 11 下编译)。
瞧,它以完全相同的方式崩溃。
更新 2:我现在在设备上尝试了(运行最新 iOS 13.5 的 iPhone 8),它可以工作,没有崩溃。然而,iOS 13.5 的模拟器确实会崩溃。当我最初发布这个问题(iOS 13.4?)时,我确定它既是在设备上崩溃又是在模拟器上。
我正在下载 iOS 12.0 Simulators 进行检查,但距离它还有几 GB 的距离......
avfoundation - `AVMutableCompositionTrack.insertTimeRange` 失败并出现错误 -11800
我正在AVMutableComposition
从视频和音轨创建:
并insertTimeRange(_:of:at:)
以 AVFoundationError -11800AVError.code.unknown
和未记录的底层NSOSStatusError
-12780 失败。可能是什么情况?
avfoundation - 对 AVAsset 进行排序时使用的正确时间范围是多少?
我正在开展一个需要对大量短(1-5 秒)AVAsset
s 进行排序的项目(问题在 n = 30 或更少时可见)。我可以找到使用范围CMTimeRange(start: .zero, end: asset.duration)
插入合成轨道的所有参考材料和示例项目,因此:
问题是这会导致音频和视频不同步(视频似乎落后于音频。)一些观察结果:
- 当我使用较少的剪辑时,问题似乎消失或不那么严重
- 片段在单独播放时不会表现出这种行为
- 某些资产具有时间范围不同的视频和音频轨道。我认为这可能是因为这里讨论的启动框架问题
- 过滤掉轨道长度不同的资产并不能解决问题
- 时间范围均由系统以 44100 时间尺度给出,因此此处讨论的时间尺度不匹配/舍入似乎不适用
我已经测试了许多不同的计算时间范围的策略,但似乎都没有解决这个问题:
(如果音频和视频时间范围不同,则前面片段中的播放头增量会增加为音频和视频时间范围计算的最大值)
这些策略都不能解决问题,我即将与 Apple 联系以获得代码级支持,但我希望我错过了一些简单的事情。我还在 Mac 上浏览了 iMovie,它能够完美地排列这些剪辑而没有同步问题,但它看起来不像是在使用它AVComposition
来支持它的预览播放器。我将不胜感激任何帮助。
ios - 使用自定义合成器在图像合成期间出现黑屏
我正在尝试从静止图像制作电影,为此我使用带有自定义指令的自定义合成器。实际上我得到电影并且长度符合预期,但在一帧(5秒)后我得到黑屏(对于另一帧)
我所做的是在我的演示项目中:
ios - 在 AVComposition 的两个视频之间搜索时,AVPlayer 冻结
我和我的团队有一个问题,我们现在几周都无法解决。
当我们在两个视频之间向前搜索时AVComposition
- 预览冻结(AVPlayer
用于AVPlayerLayer
播放)。它卡在第一个视频的最后一帧。如果它是简单的播放(不是搜索)或者搜索速度很快,它不会冻结。
这是正在发生的事情的屏幕录像: https ://www.dropbox.com/s/hxk33u3id7eug2i/AVCompositionFreezeScreenRecording.mov?dl=0
感觉就像我们尝试了一切,但没有任何帮助。添加第二个视频时,我们要求AVMutableComposition
一个兼容的轨道,它返回给我们现有的轨道,因此我们得出结论两者assetTrack
是兼容的。
多次检查所有范围和持续时间。
它在videoComposition
设置时playerItem
和未设置时都会失败。
我目前的理论是即使composition
说存在compositionTrack
与第二个视频兼容,我们也不能出于某种原因将第二个视频放入其中,也许转换不兼容或者我不知道。还有一点需要注意 - 如果我们videoAssetTrack
采用持续时间短于的源范围videoAssetTrack.timeRange.duration
- 那么一切正常。分段时间映射可能存在一些问题,但我们尝试使用它的任何方法都失败了。
我试图尽量减少演示问题所需的代码量,所以希望很容易理解我在说什么。只需从 video1 的末尾慢慢搜索到 video2 的开头,它就会卡住。 https://www.dropbox.com/s/c6guzplt5mq4zpi/AVCompositionFreezeDemo.zip?dl=0
非常感谢您,任何帮助将不胜感激!
ios - 将 slowMo AVComposition 插入 AVMutableComposition
PHPhotoLibrary 为在 SlowMo 中录制的视频提供 AVComposition 而不是 AVURLAsset。我想将 slowMo 视频插入另一个 AVMutableComposition,所以这意味着我需要将此 AVComposition 插入到 AVMutableComposition 中,这是我的编辑时间线。我之前使用的 hack 是加载曲目和片段并找到资产的 mediaURL。
一旦有了 mediaURL,我就能够创建一个可以插入到 AVMutableComposition 中的新 AVAsset。但是我想知道是否有一种更简洁的方法可以让slowMo视频合成直接插入到时间线AVMutableComposition中?
ios - 如何将不同 AVCompositions 的 AVVideoCompositions 合并为一个
我有多个AVAsset
视频,我使用 timeRanges 在AVComposition
. 每个视频都有一个关联AVVideoComposition
,它使用animationTool
向视频添加覆盖层。我希望能够以AVVideoCompositions
类似于的方式将它们串在一起,AVComposition
以便与每个 AVAsset 关联的层在指定的开始/结束时间显示/隐藏。我怎样才能做到这一点?
我目前使用此代码创建具有单个 AVAsset 的 for AVVideoComposition
:AVComposition
这是我用于创建AVComposition
具有多个资产的代码:
ios - 同时使用 AVComposition 和 AVVideoComposition 时转换错误
我正在创建一个AVMutableComposition
. 我需要水平翻转资产,所以我设置合成轨道的变换如下:
如果我导出它(我AVAssetPreset960x640
用作我的预设),它会按预期工作。
但是,我还需要添加一个AVMutableVideoComposition
叠加层以使用此组合进行渲染。此叠加层不应水平翻转。我这样指定:
当我用它导出视频时,它不会水平翻转。它停止执行应用于合成的 preferredTransform。大概是这条线导致了这个:
如果我将图层变换设置为assetTrack.preferredTransform.scaledBy(x: -1, y: 1)
or compositionTrack.preferredTransform
,导出时会出现黑屏。
Apple 有这些文档解释 AVVideoComposition 的转换。如果我理解正确,他们说我应该只是设置层指令的转换。如果我这样做 - 对图层指令而不是合成应用变换 - 我仍然会看到黑屏。
为什么会这样,我该如何解决?
swift - 在给定时间范围内iOS视频帧的特定区域添加像素化过滤器
我有一个持续时间为 60 秒的视频,视频帧大小为 1200*700。我想做像素化过滤部分帧 CGRect(100, 100, 300, 300) 10 秒到 15 秒。它可能有多个这种部分帧和时间范围。
最后,我想在导出合成之前在 AVPlayer 中播放合成。
但是,它确实使整个视频像素化。如果我给出特定的框架,它会在框架外变成绿色。另外,这里我不能使用时间范围。
如果我使用合成动画工具,导出前无法在 AVPlayer 中播放。我该如何解决这个问题?