gpt4 book ai didi

ios - AVMutableComposition 中的黑框

转载 作者:可可西里 更新时间:2023-11-01 03:25:25 25 4
gpt4 key购买 nike

这个问题与AVMutableComposition - Blank/Black frame between videos assets 很相关但由于我没有使用 AVAssetExportSession,所以答案不适合我的问题。

我正在使用一个 AVMutableComposition 来创建一个视频组合,我正在使用一个 AVAssetReader 读取它(我需要有帧数据,我不能使用 AVPlayer)但是我的视频 block 之间经常有黑帧(音频中没有明显的故障)。

我将我的 Composition 创建为

AVMutableCompositionTrack *compositionVideoTrack = [composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
AVMutableCompositionTrack *compositionAudioTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];

NSMutableArray* durationList = [NSMutableArray array];
NSMutableArray* videoList= [NSMutableArray array];
NSMutableArray* audioList= [NSMutableArray array];

for (NSInteger i = 0; i < [clips count]; i++)
{
AVURLAsset *myasset = [clips objectAtIndex:i];
AVAssetTrack *clipVideoTrack = [[myasset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];
[videoList addObject:clipVideoTrack];

AVAssetTrack *clipAudioTrack = [[myasset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
[audioList addObject:clipAudioTrack];

CMTime clipDuration = [myasset duration];
CMTimeRange clipRange = CMTimeRangeMake(kCMTimeZero, clipDuration);
[durationList addObject:[NSValue valueWithCMTimeRange:clipRange]];
}

[compositionVideoTrack insertTimeRanges:durationList ofTracks:videoList atTime:kCMTimeZero error:nil];
[compositionAudioTrack insertTimeRanges:durationList ofTracks:audioList atTime:kCMTimeZero error:nil];

我也试过在我的合成中手动插入每条轨道,但我有同样的现象。

谢谢

最佳答案

经过数小时的测试,我设法解决了这个问题。有两件事我需要改变。1) 创建 Assets 时添加'精确'选项。

 NSDictionary *options = @{AVURLAssetPreferPreciseDurationAndTimingKey:@YES};
AVURLAsset *videoAsset3 = [AVURLAsset URLAssetWithURL:clip3URL options:options];

2)不要使用

CMTime duration3 = [videoAsset3 duration];

改用

AVAssetTrack *videoAsset3Track = [[videoAsset3 tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];
CMTime duration3 = videoAsset3Track.timeRange.duration;

我在将 AVPlayer 背景颜色设置为蓝色后发现了这一点,然后我注意到出现了蓝色帧,所以问题出在时间上。一旦我更改为上述设置,不同的视频在使用时可以很好地对齐:

 AVMutableCompositionTrack *videoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo
preferredTrackID:kCMPersistentTrackID_Invalid];

[videoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, duration3)
ofTrack:videoAsset3Track
atTime:kCMTimeZero error:&error];

关于ios - AVMutableComposition 中的黑框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9093347/

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