我正在尝试将单个视频与单个图像组合在一起.这不是试图将许多图像组合成单个视频,例如
我AVMutableComposition
用来组合曲目.我的应用程序能够组合视频和图像(但就目前而言,视频组合很好!)我尝试使用AVAssetWriter
将单个图像转换为视频(我相信这是我的问题,但不是100%肯定) .然后我将其保存到app(documents directory
).从那里,我在合并中访问它,并将视频和现在变成视频的图像组合在一起.
流程:
用户选择图像 - >
将图像转换为AVAssetWriter以更改为视频 - >
合并我已预设的视频视频 - >
结果:从所选图像和预设视频制作1个视频.
我的问题:我的代码提供了一个空白区域,视频内部的图像应该是.就像在我的ImageConverter文件中一样,它会将它转换为视频,但我只会看到最后一帧作为图像,而每隔一帧都是透明的,好像图片不存在一样.因此,如果我将图像转换为视频5秒钟(假设是30帧/秒),那么我将看到(30*5)-1帧的空白区域,然后是最后一帧,最终会出现图片.我正在寻找有关如何将单个图像制作成视频或将视频和图像组合在一起而不将图像转换为视频的指导.谢谢!
合并文件在这里
func merge() {
if let firstAsset = controller.firstAsset, secondAsset = self.asset {
// 1 - Create AVMutableComposition object. This object will hold your AVMutableCompositionTrack instances.
let mixComposition = AVMutableComposition()
let firstTrack = mixComposition.addMutableTrackWithMediaType(AVMediaTypeVideo,
preferredTrackID: Int32(kCMPersistentTrackID_Invalid))
do {
try firstTrack.insertTimeRange(CMTimeRangeMake(kCMTimeZero, CMTime(seconds: 8, preferredTimescale: 600)),
ofTrack: firstAsset.tracksWithMediaType(AVMediaTypeVideo)[0] ,
atTime: kCMTimeZero)
} …
Run Code Online (Sandbox Code Playgroud) 我正在尝试导出AVMutableComposition
使用AVAssetExportSession
.
AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:mutableComposition presetName:AVAssetExportPresetHighestQuality];
exporter.outputURL=url;
exporter.outputFileType = AVFileTypeQuickTimeMovie;
exporter.videoComposition = mainCompositionInst;
exporter.shouldOptimizeForNetworkUse = YES;
[exporter exportAsynchronouslyWithCompletionHandler:^
{
switch (exporter.status)
{
case AVAssetExportSessionStatusCompleted:
{
NSLog(@"Video Merge SuccessFullt");
}
break;
case AVAssetExportSessionStatusFailed:
NSLog(@"Failed:%@", exporter.error.description);
break;
case AVAssetExportSessionStatusCancelled:
NSLog(@"Canceled:%@", exporter.error);
break;
case AVAssetExportSessionStatusExporting:
NSLog(@"Exporting!");
break;
case AVAssetExportSessionStatusWaiting:
NSLog(@"Waiting");
break;
default:
break;
}
}];
Run Code Online (Sandbox Code Playgroud)
但是出口即使是1分钟的视频也需要30秒左右,考虑到iPad内置摄像头应用程序需要不到2秒的时间.
此外,如果我videoComposition
从导出器中删除,时间减少到7秒,这仍然是不好的,考虑到视频长度只有1分钟.那么,我想知道如何将出口时间减少到最低限度?
另外,我想知道,AVAssetExportSession
一般需要这么多时间,还是只是我的情况?
更新:合并代码:
AVMutableComposition*mutableComposition = [AVMutableComposition composition];
AVMutableCompositionTrack *videoCompositionTrack = [mutableComposition addMutableTrackWithMediaType:AVMediaTypeVideo
preferredTrackID:kCMPersistentTrackID_Invalid];
AVMutableCompositionTrack *audioCompositionTrack = …
Run Code Online (Sandbox Code Playgroud) 我有200像素X 200像素UIImageView
上UICollectionViewCell
,将显示来自URL的图像.问题是我不知道URL提供了什么分辨率的图像,我认为最好在放入之前先调整它的大小,UIImageView
因为内存消耗.
我已经使用alamofire下载图像了
let url = NSURL(string: "http:\(product.picUrl)")
self.imgProductItem.af_setImageWithURL(url!, placeholderImage: UIImage(named: "app_default-resize"))
Run Code Online (Sandbox Code Playgroud)
我想知道是否有任何方法在使用它之前先调整它的大小UIImageView
?如果有任何下载图像以节省内存使用的提示,我想听听.
任何帮助,将不胜感激.谢谢.
我有一个[AVAsset]数组,我正在尝试将所有这些资产组合成一个资产,以便我可以无缝播放视频(我尝试使用AVQueuePlayer,但不能无缝播放资产).
下面是我到目前为止所做的,但当我尝试播放最终乐曲时,它只播放第一首曲目,即使它表明它具有所有曲目且总持续时间等于所有曲目.
我是否错过了一个步骤,即使看起来所有曲目都在合成中?如果AVPlayerItem有多个轨道,也许我需要以不同的方式处理AVPlayer?
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, clipIndex.duration)
} catch {
print("Failed to insert track")
}
}
print("VideoComposition Tracks: \(videoComposition.tracks.count)") // Shows multiple tracks
playerItem = AVPlayerItem(asset: videoComposition)
print("PlayerItem Duration: \(playerItem.duration.seconds)") // Shows …
Run Code Online (Sandbox Code Playgroud) ios ×3
swift ×3
avasset ×1
avfoundation ×1
avplayer ×1
buffer ×1
objective-c ×1
uiimage ×1
uiimageview ×1
video ×1