如何合并两个视频与透明度

问题描述 投票:12回答:2

我已经成功地将video-1和video-2合并在一起,使用AVFoundation框架将视频-2透明化但是在合并下面的视频(视频-1)之后不显示只有视频-2可见但是当我使用下面的代码时

AVMutableVideoCompositionLayerInstruction *SecondlayerInstruction =[AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:secondTrack];
[SecondlayerInstruction setOpacity:0.6 atTime:kCMTimeZero];

它在视频-2层上设置了不透明度。但是这里的实际问题是,视频2层上有一些不透明的内容,这里在视频2层上应用不透明度后,它也适用于不透明的内容。 我在这里添加了两个图像,它们描述了使用AVMutableVideoCompositionLayerInstruction设置不透明度之后的两个场景

enter image description here enter image description here

  • 合并透明区域后的图像是黑色,当我在第二层整体上设置不透明度时,视频2现在变得透明,但内容也变得透明。
  • 但我的问题是如何在合并后如何在另一个视频上播放透明视频。我已经检查过视频-2是透明的,因为它在Android平台上正常播放。

编辑-1:我也尝试在myVideoCompositionInstruction上设置背景颜色,这也没有帮助。参考这个老问题 link

编辑-2:在AVVideoComposition.h中,我找到了

表示合成的背景颜色。仅支持实心BGRA颜色;不支持的模式和其他颜色引用将被忽略。如果未指定背景颜色,则视频合成器将使用不透明黑色的默认backgroundColor。如果渲染的像素缓冲区没有alpha,则将忽略backgroundColor的alpha值。

这意味着什么,我没有得到它。任何一个帮助?

ios objective-c video avfoundation video-editing
2个回答
1
投票

您可以设置视频的Alpha,而不是不透明度。

说明:Alpha设置元素及其所有子元素的不透明度值,而opacity仅为单个元素设置不透明度值。

enter link description here


0
投票

好问题 :

试试这个

是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.

...

© www.soinside.com 2019 - 2024. All rights reserved.