我已经成功地将video-1和video-2合并在一起,使用AVFoundation框架将视频-2透明化但是在合并下面的视频(视频-1)之后不显示只有视频-2可见但是当我使用下面的代码时
AVMutableVideoCompositionLayerInstruction *SecondlayerInstruction =[AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:secondTrack];
[SecondlayerInstruction setOpacity:0.6 atTime:kCMTimeZero];
它在视频-2层上设置了不透明度。但是这里的实际问题是,视频2层上有一些不透明的内容,这里在视频2层上应用不透明度后,它也适用于不透明的内容。
我在这里添加了两个图像,它们描述了使用AVMutableVideoCompositionLayerInstruction
设置不透明度之后的两个场景
编辑-1:我也尝试在myVideoCompositionInstruction
上设置背景颜色,这也没有帮助。参考这个老问题 link
编辑-2:在AVVideoComposition.h中,我找到了
表示合成的背景颜色。仅支持实心BGRA颜色;不支持的模式和其他颜色引用将被忽略。如果未指定背景颜色,则视频合成器将使用不透明黑色的默认backgroundColor。如果渲染的像素缓冲区没有alpha,则将忽略backgroundColor的alpha值。
这意味着什么,我没有得到它。任何一个帮助?
好问题 :
试试这个
是totalTime:CMTime = CMTimeMake(0,0)
function 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.
...