我想将 AVAsset- 合并arrayVideos为一个视频并将其保存在相机胶卷中。Raywenderlich.com 有一个很棒的教程,其中两个视频合并为一个。我创建了以下代码,但是导出到相机胶卷后获得的视频仅包含数组中的第一个和最后一个视频(不包括中间的其余视频arrayVideos)。我在这里错过了什么吗?
var arrayVideos = [AVAsset]() //Videos Array
var atTimeM: CMTime = CMTimeMake(0, 0)
var lastAsset: AVAsset!
var layerInstructionsArray = [AVVideoCompositionLayerInstruction]()
var completeTrackDuration: CMTime = CMTimeMake(0, 1)
var videoSize: CGSize = CGSize(width: 0.0, height: 0.0)
func 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 = lastAsset!.duration
}
try videoTrack.insertTimeRange(CMTimeRangeMake(kCMTimeZero, videoAsset.duration), of: videoAsset.tracks(withMediaType: …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试使用 AVMutableComposition 将 5 个视频背靠背放置,如下所示:
[mixComposition insertTimeRange:CMTimeRangeMake(kCMTimeZero, asset1.duration) ofAsset:asset1 atTime:[mixComposition duration] error:nil];
[mixComposition insertTimeRange:CMTimeRangeMake(kCMTimeZero, asset2.duration) ofAsset:asset2 atTime:[mixComposition duration] error:nil];
[mixComposition insertTimeRange:CMTimeRangeMake(kCMTimeZero, asset3.duration) ofAsset:asset3 atTime:[mixComposition duration] error:nil];
[mixComposition insertTimeRange:CMTimeRangeMake(kCMTimeZero, asset4.duration) ofAsset:asset4 atTime:[mixComposition duration] error:nil];
[mixComposition insertTimeRange:CMTimeRangeMake(kCMTimeZero, asset5.duration) ofAsset:asset5 atTime:[mixComposition duration] error:nil];
Run Code Online (Sandbox Code Playgroud)
然后,我使用 AVAssetExportSession 导出视频,但在每个视频之间,我会得到一个需要删除的空白/黑色帧。以前有人遇到过这个问题吗?如果有的话,你解决了吗?
此外,空白帧不在源视频文件中。
提前致谢。
我有一个应用程序,允许用户以可变组合录制视频.我想设置一些文本,然后在用户在导出后播放时设置的间隔进行更改.
例如,如果第一个单词是"dog",那么我想设置它以便"cat"在X秒后替换该字符串,然后在X秒后用另一个单词替换.
我的视频是使用AVExportSession从AVMutableComposition导出的,我的文字将使用添加的CATextlayer添加,如下所示:
//code to setup AVMutableComposition
...
//code to setup CATextLayer and AVMutableVideoComposition
CALayer *animatedTitleLayer = [CALayer layer];
CATextLayer *titleLayer = [[CATextLayer alloc] init];
titleLayer.string = @"Text I want to change at an interval";
titleLayer.alignmentMode = kCAAlignmentCenter;
titleLayer.bounds = CGRectMake(150, 50, 124, 354);
titleLayer.position = CGPointMake(120, 270);
titleLayer.bounds = CGRectIntegral(CGRectMake(0, 0, 250, 150));
titleLayer.opacity = 1;
titleLayer.backgroundColor = [UIColor purpleColor].CGColor;
[animatedTitleLayer addSublayer:titleLayer];
animatedTitleLayer.position = CGPointMake(40, 5);
CALayer *parentLayer = [CALayer layer];
CALayer *videoLayer = [CALayer layer];
parentLayer.frame = CGRectMake(0, …Run Code Online (Sandbox Code Playgroud) 如何在不使用FFmpeg的情况下从视频文件中取出音频?
我想用AVMutableComposition它AVURLAsset来解决它.从.mov到.m4a文件的转换.
我在iOS应用程序中使用AVCaptureConnection捕获视频.之后,我在视频中添加一些图像作为CALayers.一切都运行正常,但在添加图像后,在结果视频的最后得到一个黑框.在此没有影响实际音频/视频的帧.对于音频我正在提取它并改变它的音高然后使用AVMutableComposition添加它.这是我正在使用的代码.请帮我解决我做错了什么,或者我需要添加其他东西.
cmp = [AVMutableComposition composition];
AVMutableCompositionTrack *videoComposition = [cmp addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
AVMutableCompositionTrack *audioComposition = [cmp addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
AVAssetTrack *sourceVideoTrack = [[asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];
AVAssetTrack *sourceAudioTrack = [[audioAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
[videoComposition insertTimeRange:CMTimeRangeMake(kCMTimeZero, [asset duration]) ofTrack:sourceVideoTrack atTime:kCMTimeZero error:nil] ;
[audioComposition insertTimeRange:CMTimeRangeMake(kCMTimeZero, [asset duration]) ofTrack:sourceAudioTrack atTime:kCMTimeZero error:nil];
animComp = [AVMutableVideoComposition videoComposition];
animComp.renderSize = CGSizeMake(320, 320);
animComp.frameDuration = CMTimeMake(1,30);
animComp.animationTool = [AVVideoCompositionCoreAnimationTool videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer:videoLayer inLayer:parentLayer];
// to gather the audio part of the video
NSArray *tracksToDuck = [cmp tracksWithMediaType:AVMediaTypeAudio];
NSMutableArray *trackMixArray = [NSMutableArray array];
for …Run Code Online (Sandbox Code Playgroud) 我正在使用 AVFoundation 裁剪和旋转视频,但在设置 AVAssetExporter 的 videoComposition 属性时收到 SIGABRT 错误。
assetExport.videoComposition = videoComposition;
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
谢谢,丹尼尔。
我有一个可以加载到 AVAsset 中的视频文件。我想更改播放此视频的速率并将其速度加倍,以便如果视频时长为 10 秒,则它会加快速度以在 5 秒内完成。
这是我正在尝试的代码,有人能告诉我我哪里出错了吗?
帧持续时间是我实现目标所需的属性。
AVAsset *anAsset = self.moviePlayer.currentItem.asset;
NSArray *compatiblePresets = [AVAssetExportSession exportPresetsCompatibleWithAsset:anAsset];
if ([compatiblePresets containsObject:AVAssetExportPreset640x480]) {
AVAssetExportSession *exportSession = [[AVAssetExportSession alloc]
initWithAsset:anAsset presetName:AVAssetExportPreset640x480];
// Implementation continues.
NSString *tmpStr = [[aclip selectedTakeUrl] stringByReplacingOccurrencesOfString:@".m4v" withString:@""];
NSString *filePath = [NSString stringWithFormat:@"%@_applied.m4v", tmpStr];
exportSession.outputURL = [NSURL fileURLWithPath:filePath];
AVMutableVideoComposition *vidcomp = [AVMutableVideoComposition videoCompositionWithPropertiesOfAsset:anAsset];
vidcomp.frameDuration = CMTimeMake(1, 24);
//self.moviePlayer.currentItem.videoComposition = vidcomp;
exportSession.videoComposition = vidcomp;
//exportSession.videoComposition.frameDuration = CMTimeMake(1, 50);
// what is the song URL before loading startRecordingViewController?
NSLog(@"From Save settgins …Run Code Online (Sandbox Code Playgroud) avfoundation ios avmutablecomposition avvideocomposition avasset
我有 2 个视频,其中一个是具有透明背景的叠加视频(我尝试添加到视频中的爆炸视频)。当我尝试使用 AVMutableComposition 组合它们时,我看到覆盖的视频 alpha 通道被忽略。基本上我只看到第二个视频(黑色背景而不是透明)。
作为测试,我为叠加视频添加了 0.9 的不透明度,以确保它们正确合并,结果我看到叠加视频下方的主视频(当然不是我想要的,但证明合成有效)。关于如何使 alpha 通道适用于第二个视频的任何想法?
NSError* error = nil;
AVMutableComposition *comp = [AVMutableComposition composition];
AVMutableCompositionTrack* videoCompTrack = [comp addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:0];
AVMutableCompositionTrack* videoCompTrack2 = [comp addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:1];
AVMutableCompositionTrack* audioCompTrack = [comp addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
// main video
AVURLAsset* videoAssetMain = [AVURLAsset URLAssetWithURL:url1 options:nil];
NSArray* tracks = [videoAssetMain tracksWithMediaType:AVMediaTypeVideo];
AVAssetTrack* videoTrackMain = [tracks firstObject];
tracks = [videoAssetMain tracksWithMediaType:AVMediaTypeAudio];
AVAssetTrack* audioTrackMain = [tracks firstObject];
CMTimeRange timeRange = CMTimeRangeMake(kCMTimeZero, videoTrackMain.timeRange.duration);
// overlay video with alpha channel
AVURLAsset* videoAssetOver …Run Code Online (Sandbox Code Playgroud) 我正在使用AVPlayer播放AVMutableVideoComposition,因为IOS8一切都很好.但是现在视频开始播放,并且在4或5秒后它停止,如缓冲或类似的东西,声音继续播放,当视频结束AVPlayer循环并播放它没有停止.
我不知道解决这个问题.
任何帮助将不胜感激,
谢谢
像这样的东西我想在视频中完成录制时添加当前时间戳并保存到相机胶卷中.
**注意**:我已经成功添加了AVVideoPreviewLayer中的当前位置和时间戳,但是在导出视频后它是静态的显示静态时间不显示运行时间戳
ios ×8
avfoundation ×4
avasset ×2
avurlasset ×2
video ×2
alpha ×1
arrays ×1
avplayer ×1
camera ×1
catextlayer ×1
freeze ×1
ios8 ×1
iphone ×1
timestamp ×1
transparency ×1
xcode ×1