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

11
我知道您可以使用AVFoundation类(AVURLAsset、AVMutableComposition、AVMutableCompositionTrack等)将多个剪辑合并并创建一个视频,通过将一个接一个地附加来实现。
有像'Video-Joiner'这样的应用程序可以做到这一点。
我的想法是并排摆放两个视频。
我的应用程序想法- SelfInterviewer,请不要抄袭 :)
首先,我使用前置摄像头录制视频1,站在框架左侧录制。 然后在视频2右侧录制。在视频1中提问,在视频2中回答。
当我合并时,它应该看起来像我正在被自己采访。
我几乎确定这在iOS上是不可行的,只是想确认一下。
此外,如果不能实现,我会对任何服务器端解决方案感兴趣-上传两个视频并完成相同的操作。我认为Adobe Premiere可以做到这一点。 不确定他们是否有任何公共API。
感谢任何想法。
谢谢。

你找到解决方案了吗? - Mr.G
嗨@Krishnan,你好吗...我需要你的帮助,真的...我被同样的问题困住了...我必须在合并后并排显示视频...两个视频都显示出来了,但是没有像并排那样正确地显示... - Ahtazaz
2个回答

11

可以合并两个视频:
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 的新用户,我无法对答案进行投票。 - Naga
但是,addMutableTrackWithMediaType: preferredTracfirst: API 不存在。只有 addMutableTrackWithMediaType:preferredTrackID: API 存在。我尝试使用 addMutableTrackWithMediaType:preferredTrackID: API,但我只能获得导出视频中的第一个视频。 - spd
抱歉回复晚了。您应该使用一个MutableComposition轨道而不是两个。 - Splendid
[secondTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, secondAsset.duration) ofTrack:[[secondAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:kCMTimeZero error:nil]; 我在这里得到了一个警告,警告内容是:“实例方法'-setPreferredTransform:'未找到(返回类型默认为'id')” - 有任何想法为什么会出现这种情况? - Sameera Chathuranga
我只得到了导出视频中的第一个视频,但持续时间是正确的。我的MutableComposition只分配了一次,如所述。请帮忙。 - Arnlee Vizcayno
显示剩余2条评论

2
我在尝试做同样的事情时找到了这个链接,但对我来说它不是并排的,而是一个视频放在另一个视频上面。你可以通过这个链接做同样的事情:视频操作

嗨@Torongo...我需要你在这个教程中的帮助...虽然上面的链接是一个很好的教程...但我该如何像卡拉OK应用程序一样并排显示视频,或者你可以说像二重唱视频一样...我会非常感激您的指导...谢谢。 - Ahtazaz
嗨@Mr.G,你好吗...我需要你在这个教程中的帮助...虽然上面的链接是一个很棒的教程...但我该如何像卡拉OK应用程序一样并排显示视频,或者说像二重唱视频那样呢?我真的很感激你的指导...谢谢。 - Ahtazaz
@Mr.G 我该如何重复播放一个视频,直到大视频播放? - Dixit Akabari
@Mr.G 怎么做?你能解释一下吗? - Dixit Akabari
你需要做的是将两个视频样本绑定在一起并播放,以保持播放的连续性。你所说的“直到大视频播放”是什么意思? - Mr.G
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接