iOS 视频编辑 - 是不是可以使用 iOS 4 AVFoundation 类将两个视频文件合并(并排而不是一个接一个)为一个?

Posted

技术标签:

【中文标题】iOS 视频编辑 - 是不是可以使用 iOS 4 AVFoundation 类将两个视频文件合并(并排而不是一个接一个)为一个?【英文标题】:iOS Video Editing - Is it possible to merge (side by side not one after other) two video files into one using iOS 4 AVFoundation classes?iOS 视频编辑 - 是否可以使用 iOS 4 AVFoundation 类将两个视频文件合并(并排而不是一个接一个)为一个? 【发布时间】:2011-08-11 01:47:45 【问题描述】:

我知道您可以使用 AVFoundation 类(AVURLAsset、AVMutableComposition、AVMutableCompositionTrack 等)一个接一个地附加来合并多个剪辑并创建一个视频。

有像“Video-Joiner”这样的应用可以做到这一点。

我想做的是并列 2 个视频。

我的应用创意 - SelfInterviewer 请不要窃取 :)

首先,我使用站在画面左侧的前置摄像头录制视频 1。然后视频 2 站在右边。在视频 1 中提出问题,在视频 2 中我回答。

当我合并时,应该看起来像是在接受我自己的采访。

我几乎可以肯定它在 ios 中不可行,只是想确认一下。

另外,如果不行,我会对任何服务器端解决方案感兴趣 - 上传两个视频并完成相同的操作。我认为adobe Premiere可以做到。不确定他们是否有任何公共 API。

欣赏任何想法。

谢谢。

【问题讨论】:

你找到解决方案了吗?? 嗨@Krishnan,你好吗...我需要您的帮助,说真的...我遇到了同样的问题...合并后我必须并排显示视频。 .. 两个视频都在显示,但没有像并排一样正确显示... 【参考方案1】:

是的,可以合并 2 个视频: 1. 在开始时间 0 将两个资产添加到 AVMutableComposition。 2. 将首选变换设置为轨道,在本例中为比例变换。

    - (void) mergeVideos
    ///... after getting hold or your assets....firstAsset, secondAsset

    AVMutableComposition* mixComposition = [AVMutableComposition composition];

    AVMutableCompositionTrack *firstTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo 
                                                                      preferredTracfirst:kCMPersistentTracfirst_Invalid];
    [firstTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, firstAsset.duration) 
                        ofTrack:[[firstAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] 
                         atTime:kCMTimeZero error:nil];

    AVMutableCompositionTrack *secondTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo 
                                                                       preferredTracfirst:kCMPersistentTracfirst_Invalid];

    [secondTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, secondAsset.duration)
                         ofTrack:[[secondAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] 
                          atTime:kCMTimeZero error:nil];    

    [secondTrack setPreferredTransform:CGAffineTransformMakeScale(0.25f,0.25f)]; 

    //... export video here...


【讨论】:

谢谢,我会试试的。不幸的是,我无法对答案投票,因为我是 SO 新手。 但是,addMutableTrackWithMediaType: preferredTracfirst: API 不存在。只有 API addMutableTrackWithMediaType:preferredTrackID: 存在。我尝试使用 API addMutableTrackWithMediaType:preferredTrackID 本身,我只得到导出视频中的第一个视频。 抱歉回复晚了。你应该使用一个 MutableComposition 区域而不是两个。 [secondTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, secondAsset.duration) ofTrack:[[secondAsset trackingWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:kCMTimeZero error:nil];我收到此警告,这是警告-“找不到实例方法'-setPreferredTransform:'(返回类型默认为'id')”-知道为什么会这样。 我只得到导出视频中的第一个视频,但持续时间是正确的。我的MutableComposition 按说明分配一次。请帮忙。【参考方案2】:

我在尝试做同样的事情时发现了这个链接,但对我来说它不是并排的,它的视频在另一个视频的顶部,你可以通过这个链接做同样的事情

Video Manipulation

【讨论】:

@Torongo 你确定,它可以工作,以防万一abdulazeem.wordpress.com/2012/04/02/… 嗨@Torongo ...我在本教程中需要您的帮助...虽然上面的链接是一个很棒的教程...但是我怎样才能并排显示视频,就像卡拉OK应用程序一样或者你可以像二重唱视频一样说...我将非常感谢您的指导...谢谢 嗨@Mr.G,你好吗...我在本教程中需要您的帮助...虽然上面的链接是一个很棒的教程...但是我怎样才能并排显示视频,就像卡拉 OK 应用程序一样,或者您可以说像二重唱视频一样...我将非常感谢您的指导...谢谢 @Mr.Ahtazaz 我在 4 年前做过这个,但我认为这并不难,我认为你需要调整视频视图框架 @Mr.G 如何在播放大视频之前重复播放一个视频?

以上是关于iOS 视频编辑 - 是不是可以使用 iOS 4 AVFoundation 类将两个视频文件合并(并排而不是一个接一个)为一个?的主要内容,如果未能解决你的问题,请参考以下文章

iOS视频编辑SDK

IOS - 使用 Youtube API 检查 Youtube 视频是不是存在

iOS - 使用苹果自带的UIVideoEditController进行视频编辑

锐动IOS带UI视频编辑SDK

IOS:是不是可以同时录制压缩视频和未压缩音频

RDVECore来自锐动的无UI,高度抽象化API的视频编辑SDK--IOS版