如何合并两个具有透明度的视频
Posted
技术标签:
【中文标题】如何合并两个具有透明度的视频【英文标题】:how to merge two video with transparency 【发布时间】:2017-04-15 17:44:15 【问题描述】:我已成功合并 video-1 和 video-2,使用 AVFoundation framework 将 video-2 相互叠加,但合并后视频(video-1)不只显示 video- 2 是可见的,但是当我使用下面的代码时
AVMutableVideoCompositionLayerInstruction *SecondlayerInstruction =[AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:secondTrack];
[SecondlayerInstruction setOpacity:0.6 atTime:kCMTimeZero];
它在 video-2 层上设置了不透明度。但这里的实际问题是,video-2 层上有一些不透明的内容,在这里在 video-2 层上应用不透明度后,它也适用于不透明的内容透明。
我在这里添加了两张图片,描述了使用AVMutableVideoCompositionLayerInstruction
设置不透明度后的两种情况@
如合并透明区域后的图像为黑色,当我在整个第二层设置不透明度时,video-2 现在变为透明,但内容也变为透明。 但我的问题是合并后如何在另一个视频上播放透明视频。我已经检查了 video-2 是透明的,因为它可以在 android 平台上正常播放。
Edited-1 : 我还尝试在myVideoCompositionInstruction
上设置背景颜色,这也没有帮助。参考这个老问题 link
Edited-2 : 在 AVVideoComposition.h 中,我找到了
表示合成的背景颜色。纯色 BGRA 颜色 仅支持;图案和其他颜色参考不是 支持将被忽略。如果未指定背景颜色 视频合成器将使用不透明的默认背景颜色 黑色的。如果渲染的像素缓冲区没有 alpha,则 alpha backgroundColor 的值将被忽略。
什么意思,我没听懂。谁能帮忙?
【问题讨论】:
你有解决这个问题的办法吗?我面临同样的问题。我想合并两个具有第二个透明度的视频。但它不起作用。 【参考方案1】:您可以设置视频的 alpha,而不是不透明度。
说明:
Alpha
设置元素及其所有子元素的不透明度值,而opacity
仅设置单个组件的不透明度值。
enter link description here
【讨论】:
或视图的 alpha @ShravyaBoggarapu 没找到你。【参考方案2】:好问题:
试试这个
var totalTime : CMTime = CMTimeMake(0, 0)
func mergeVideoArray()
let mixComposition = AVMutableComposition()
for videoAsset in arrayVideos
let videoTrack =
mixComposition.addMutableTrack(withMediaType: AVMediaTypeVideo,
preferredTrackID: Int32(kCMPersistentTrackID_Invalid))
do
if videoAsset == arrayVideos.first
atTimeM = kCMTimeZero
else
atTimeM = totalTime // <-- Use the total time for all the videos seen so far.
try videoTrack.insertTimeRange(CMTimeRangeMake(kCMTimeZero, videoAsset.duration),
of: videoAsset.tracks(withMediaType: AVMediaTypeVideo)[0],
at: atTimeM)
videoSize = videoTrack.naturalSize
catch let error as NSError
print("error: \(error)")
totalTime += videoAsset.duration // <-- Update the total time for all videos.
...
【讨论】:
以上是关于如何合并两个具有透明度的视频的主要内容,如果未能解决你的问题,请参考以下文章