Tag: avmutablecomposition

AVAssetTrack与alpha通道?

我正在尝试将AVAssetTracks层叠到AVMutableComposition中,AVAssetTracks在video中有一个alpha通道。 我成功地导出了一个videoAVAsset与像素缓冲区比alpha通道和透明度,但是当我试图将其添加到一个AVMutableCompositionTrack和层,它不能正确显示。 这可能吗? 魔术是在AVAsset创build时还是在AVMutableComposition或AVVideoComposition中执行的? 任何线索将是一个巨大的帮助。

通过AVMutableVideoComposition和CAAnimation输出黑色video

我正在构buildiOS应用程序,可以loggingvideo,并使用AVFoundation和CAAnimation在录制的video上添加animation叠加。 所有子function工作正常,但最终video的背景是黑色,但animation播放。 这不是渲染我select的背景video。 我已经使用AVAssetWriter来录制video,并在相机胶卷上播放。 但是如果我使用这个录制的video添加叠加,最终的video背景是黑色的。 有趣的是,如果我通过本机的iOS相机应用程序录制video,并使用它来添加覆盖,它是完美的工作。 我检查了这个问题,但没有为我工作。 黑色videoCAAnimation和AVFoundation AVAssetExportSession 任何帮助将不胜感激。 谢谢

AVMutableComposition – 只播放第一首歌(Swift)

我有一个[AVAsset]数组,我试图将所有这些资产合并到一个单一的资产,以便我可以无缝地播放video(我尝试使用AVQueuePlayer,但不会无缝地播放资产)。 下面是我到目前为止,但是当我尝试播放最后的作曲,它只播放第一首曲目,即使它显示它具有所有曲目,并且总持续时间等于所有曲目一起。 即使看起来所有的曲目都在曲目中,我是否错过了一个步骤? 也许我需要以不同的方式处理AVPlayer,如果AVPlayerItem有多个轨道? let playerLayer: AVPlayerLayer = AVPlayerLayer() lazy var videoPlayer: AVPlayer = AVPlayer() var videoClips = [AVAsset]() let videoComposition = AVMutableComposition() var playerItem: AVPlayerItem! var lastTime: CMTime = kCMTimeZero for clipIndex in videoClips { let videoCompositionTrack = videoComposition.addMutableTrackWithMediaType(AVMediaTypeVideo, preferredTrackID: Int32(kCMPersistentTrackID_Invalid)) do { try videoCompositionTrack.insertTimeRange(CMTimeRangeMake(kCMTimeZero, clipIndex.duration), ofTrack: clipIndex.tracksWithMediaType(AVMediaTypeVideo)[0] , atTime: lastTime) lastTime = CMTimeAdd(lastTime, […]

iOS – 更改每个AVAssetTrack的音量

我有一些audio文件需要在AVMutableComposition插入。 每个audio都有不同的音量。 为了做到这一点,我为每个audio文件创build了一个AVMutableTrackComposition和一个AVAssetTrack 。 所以我使用AVMutableAudioMix一个实例来改变每个音轨的AVMutableAudioMix 。 let composition = AVMutableComposition() var trackMixArray = NSMutableArray() for audio in layer{ let trackAudio:AVMutableCompositionTrack = composition.addMutableTrackWithMediaType(AVMediaTypeAudio, preferredTrackID: CMPersistentTrackID()) let file = project.stringByAppendingPathComponent(audio.name) let soundAsset = AVURLAsset(URL: NSURL(fileURLWithPath: file), options: option as [NSObject : AnyObject]) let sounds = soundAsset.tracksWithMediaType(AVMediaTypeAudio) var sound:AVAssetTrack = sounds[0] as! AVAssetTrack let duration:CMTime = sound.timeRange.duration let […]

iOS – 反转video文件(.mov)

要求 : 这听起来像不同,但这是我想要实现的。 我想反向制作电影(.mov)文件。 就像我们如何倒带电影文件。 我也想保持相同的帧速率,因为我的video包含。 注:我不只是想以相反的顺序播放video文件。 我想生成新的电影文件以相反的顺序播放。 我的探索 : 我想到了下面的步骤来执行相同的操作。 使用AVAssetExportSession制作具有特定帧速率的video文件块 使用AVMutableComposition和AVAssetExportSession所有这些video块合并成单个电影文件。 在合并过程中还将每个文件的audio合并到新的video文件中。 使用上述步骤,我能够实现相反的结果video文件,但我有以下关注。 video持续时间长,需要很长时间。 它也消耗巨大的CPU周期和内存来完成这个过程。 有没有人有任何其他优化的方式来实现这一目标? 任何build议将不胜感激。

精确的AVMutableComposition时间

我试图用AVMutableComposition在精确的时间播放一系列声音文件。 当视图加载时,我创build了这个组合,意图是在1秒内均匀播放4个声音。 不pipe声音有多长或多短都不重要,我只想在0,0.25,0.5和0.75秒的时间点发射它们: AVMutableComposition *composition = [[AVMutableComposition alloc] init]; NSDictionary *options = @{AVURLAssetPreferPreciseDurationAndTimingKey : @YES}; for (NSInteger i = 0; i < 4; i++) { AVMutableCompositionTrack* track = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid]; NSURL *url = [[NSBundle mainBundle] URLForResource:[NSString stringWithFormat:@"sound_file_%i", i] withExtension:@"caf"]; AVURLAsset *asset = [AVURLAsset URLAssetWithURL:url options:options]; AVAssetTrack *assetTrack = [asset tracksWithMediaType:AVMediaTypeAudio].firstObject; CMTimeRange timeRange = [assetTrack […]

AVAssetExportSession给我一个输出video的右侧和底部的绿色边框

代码如下: AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:mixComposition presetName:AVAssetExportPresetHighestQuality]; exporter.outputURL = outputUrl; exporter.outputFileType = AVFileTypeQuickTimeMovie; exporter.videoComposition = mainComposition; exporter.shouldOptimizeForNetworkUse = YES; [exporter exportAsynchronouslyWithCompletionHandler:^{ //completion }]; 我尝试了不同的质量设置。 无论我尝试渲染什么video,我都会在video的右侧沿着底部获取一个1-2像素的边框。 什么可能导致这个,我该如何解决? 编辑:我没有在任何地方使用任何种类的绿色,所以这必须以某种方式来自框架。

修复使用AVMutableComposition拼接(合并)video时的方向

TLDR – 看编辑 我正在Swift中创build一个testing应用程序,我想使用AVMutableComposition从应用程序文档目录AVMutableComposition多个video拼接在一起。 在某种程度上,我已经取得了成功,我的所有video都被拼接在一起,所有内容都显示出正确的尺寸和风景。 但是,我的问题是, 所有video都以编辑中最后一个video的方向显示 。 我知道,要解决这个问题,我将需要为每个添加的轨道添加图层指令,但我似乎无法得到这个正确的答案,我发现整个编译似乎以纵向方向出现与景观video简单地缩放以适应纵向视图,所以当我将手机放在侧面来观看横向video时,由于它们被缩放为纵向尺寸,所以它们仍然很小。 这不是我正在寻找的结果,我希望预期的function,即如果一个video是横向,它显示缩放时,在纵向模式,但如果手机旋转,我希望该景观video填满屏幕(就像它只是在观看在照片中的风景video)和相同的肖像,以便在纵向观看时,它是全屏幕,当横向转动时,video缩放到横向大小(就像在查看照片中的肖像video时一样)。 总之,我希望得到的结果是,当查看具有横向和纵向video的编辑时,可以使用手机查看整个编辑,而横向video是全屏和缩放的,或者在查看同一个video时纵向纵向video是全屏幕和风景video缩放到大小。 有了所有的答案,我发现情况并非如此,当从照片导入video以添加到编辑中时,他们似乎都有非常意想不到的行为,并且在添加使用前置摄像头拍摄的video时也会出现相同的随机行为用我目前实现的从库导入的video清楚,“selfie”video出现在正确的大小没有这些问题)。 我正在寻找一种方法来旋转/缩放这些video,以便他们始终以正确的方向和比例显示,具体取决于用户握住手机的方式。 编辑 :我现在知道,我不能在一个单一的video都具有风景和肖像方向,所以我期待的预期结果将是在横向方向有最终的video。 我已经想出了如何使切换所有的方向和规模,以获得一切相同的方式,但我的输出是一个肖像video,如果任何人都可以帮助我改变这一点,所以我的输出是景观,将不胜感激。 下面是我的function来获取每个video的指令: func videoTransformForTrack(asset: AVAsset) -> CGAffineTransform { var return_value:CGAffineTransform? let assetTrack = asset.tracksWithMediaType(AVMediaTypeVideo)[0] let transform = assetTrack.preferredTransform let assetInfo = orientationFromTransform(transform) var scaleToFitRatio = UIScreen.mainScreen().bounds.width / assetTrack.naturalSize.width if assetInfo.isPortrait { scaleToFitRatio = UIScreen.mainScreen().bounds.width / assetTrack.naturalSize.height let scaleFactor = CGAffineTransformMakeScale(scaleToFitRatio, […]

使用AVMutableVideoComposition时,AVMutableComposition的怪异行为被冻结

我正在尝试使用AVMutableComposition合并多个video。 我面对的问题是,每当我尝试添加任何AVMutableVideoComposition来应用任何指令时,我的播放会在AVPlayer以6秒的时间间隔冻结。 另一个有趣的事情是,如果我使用相同的videoComposition导出后在iPad的照片应用程序中播放它,它会发挥很好。 那么为什么它在AVPlayer 6秒钟冻结? 码: AVMutableComposition *mutableComposition = [AVMutableComposition composition]; AVMutableCompositionTrack *videoCompositionTrack = [mutableComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; AVMutableCompositionTrack *audioCompositionTrack = [mutableComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid]; for (AVURLAsset *asset in assets) { AVAssetTrack *assetTrack; assetTrack = [[asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]; AVAssetTrack *audioAssetTrack = [asset tracksWithMediaType:AVMediaTypeAudio].firstObject; NSError *error; [videoCompositionTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, assetTrack.timeRange.duration ) ofTrack:assetTrack atTime:time error:&error]; if (error) { NSLog(@"asset url […]

使用AVMutableComposition编写video和audio

我有一个奇怪的问题。 在我的应用程序中,我使用下面的代码组合了多个audio和video文件。 结果video似乎工作正常,一旦我将它从设备下载到计算机和快速时间播放,但每当我试图播放使用UIWebView或AVPLayer新组成的video,我只能看到合并video文件的第一部分。 此外,当我试图使用MPMoviePlayerController播放它挂在“加载”。 我可以听到所有作品的audio。 为了说清楚我有两个数组:1-audiopath与audio文件[歌曲1,歌曲2,歌曲3]的path; 2-电影与video文件path[电影1,电影2,电影3]; 合并这些文件后,我只能看到movie1,但是我可以听到song1 + song2 + song3。 PS歌曲和电影有不同的长度(小于0.2s的差异)。 任何帮助将不胜感激。 先谢谢你,Janusz -(void)putFilesTogether{ AVMutableComposition *mixComposition = [AVMutableComposition composition]; AVMutableCompositionTrack *videoCompositionTrack =[[AVMutableCompositionTrack alloc]init]; AVMutableCompositionTrack *audioCompositionTrack =[[AVMutableCompositionTrack alloc]init]; NSLog(@" movie %@ audio %@ ", moviePieces, audioPieces); NSError * error; for(int i=0;i<moviePieces.count;i++) { NSFileManager * fm = [NSFileManager defaultManager]; NSString * movieFilePath; NSString * audioFilePath; […]