gpt4 book ai didi

objective-c - 合并两个视频而不使用 ffmpeg (Cocoa)

转载 作者:行者123 更新时间:2023-12-03 16:55:14 24 4
gpt4 key购买 nike

我一直在寻找答案,但似乎找不到。很多人问过,但没有人得到答案。我有一个有两个视频路径的应用程序。现在我只想将它们合并到一个可以以“.mov”格式保存的文件中。有谁知道如何做到这一点吗?

注意:我想在不安装并且显然使用 ffmpeg 的情况下实现此目的。

如果您有时间,一些代码会非常有帮助。

最佳答案

首先,显然您需要确保影片类型可由 Quicktime 库读取/播放。

但是,假设情况确实如此,程序基本上是这样的:获取指向某些内存来存储数据的指针:

QTMovie *myCombinedMovie = [[QTMovie alloc] initToWritableData:[NSMutableData data] error:nil];

接下来,获取您想要使用的第一部电影并将其插入到 myCombinedMovie 您可以将想要组合的部分放入一个数组中,然后枚举它们以组合任意数量的部分。另外,如果您愿意,您可以更改目标范围以添加偏移量:

QTMovie *firstMovie = [QTMovie movieWithURL:firstURL error:nil];
// NOTE THAT THE 3 LINES BELOW WERE CHANGED FROM MY ORIGINAL POST!
QTTimeRange timeRange = QTMakeTimeRange(QTZeroTime, [firstMovie duration]);
QTTime insertionTime = [myCombinedMovie duration];
[myCombinedMovie insertSegmentOfMovie:firstMovie timeRange:timeRange atTime:insertionTime];

冲洗并重复电影的第二部分。

然后,输出扁平化的影片(扁平化使其独立):

NSDictionary *writeAttributes = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], QTMovieFlatten, nil]; //note that you can add a QTMovieExport key with an appropriate value here to export as a specific type
[myCombinedMovie writeToFile:destinationPath withAttributes:writeAttributes];

已编辑:我编辑了上面的内容,因为插入时间计算错误。这种方式看起来比较容易。下面是全部代码,包括枚举一系列电影和大量错误日志记录。

NSError *err = nil;
QTMovie *myCombinedMovie = [[QTMovie alloc] initToWritableData:[NSMutableData data] error:&err];
if (err)
{
NSLog(@"Error creating myCombinedMovie: %@", [err localizedDescription]);
return;
}

NSArray *myMovieURLs = [NSArray arrayWithObjects:[NSURL fileURLWithPath:@"/path/to/the/firstmovie.mov"], [NSURL fileURLWithPath:@"/path/to/the/secondmovie.mov"], nil];

for (NSURL *url in myMovieURLs)
{
QTMovie *theMovie = [QTMovie movieWithURL:url error:&err];
if (err){
NSLog(@"Error loading one of the movies: %@", [err localizedDescription]);
return;
}
QTTimeRange timeRange = QTMakeTimeRange(QTZeroTime, [theMovie duration]);
QTTime insertionTime = [myCombinedMovie duration];
[myCombinedMovie insertSegmentOfMovie:theMovie timeRange:timeRange atTime:insertionTime];
}

NSDictionary *writeAttributes = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], QTMovieFlatten, nil];
bool success = [myCombinedMovie writeToFile:@"/path/to/outputmovie.mov" withAttributes:writeAttributes error:&err];
if (!success)
{
NSLog(@"Error writing movie: %@", [err localizedDescription]);
return;
}

关于objective-c - 合并两个视频而不使用 ffmpeg (Cocoa),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9149316/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com