我有一个严重的问题:我有NSArray几个UIImage对象.我现在想做的是从那些创作电影UIImages.但我不知道该怎么做.
我希望有人可以帮助我或给我一个代码片段,它可以做我喜欢的事情.
编辑:供将来参考 - 应用解决方案后,如果视频看起来扭曲,请确保您捕获的图像/区域的宽度是16的倍数.在这里经过几个小时的努力后发现:
为什么我的UIImages电影得到了扭曲?
这是完整的解决方案(只需确保宽度是16的倍数)
http://codethink.no-ip.org/wordpress/archives/673
我想导出一部电影,AVAssetWriter但无法弄清楚如何同步包含视频和音频轨道.仅导出视频工作正常,但是当我添加音频时,生成的电影如下所示:
首先,我看到视频(没有音频),然后视频冻结(显示最后一个图像帧直到结束),几秒钟后我听到音频.
我尝试了一些事情CMSampleBufferSetOutputPresentationTimeStamp(CMSampleBufferGetPresentationTimeStamp从当前减去第一个)用于音频,但这一切都不起作用,我认为这不是正确的方向,因为源电影中的视频和音频应该是同步的. ..
我的设置简单:我创建一个AVAssetReader和2 AVAssetReaderTrackOutput(一个用于视频,一个用于音频)并将它们添加到AVAssetReader,然后我创建一个AVAssetWriter和2 AVAssetWriterInput(视频和音频)并将它们添加到AVAssetWriter...我开始一切:
[assetReader startReading];
[assetWriter startWriting];
[assetWriter startSessionAtSourceTime:kCMTimeZero];
Run Code Online (Sandbox Code Playgroud)
然后我运行2个队列来做样本缓冲区的东西:
dispatch_queue_t queueVideo=dispatch_queue_create("assetVideoWriterQueue", NULL);
[assetWriterVideoInput requestMediaDataWhenReadyOnQueue:queueVideo usingBlock:^
{
while([assetWriterVideoInput isReadyForMoreMediaData])
{
CMSampleBufferRef sampleBuffer=[assetReaderVideoOutput copyNextSampleBuffer];
if(sampleBuffer)
{
[assetWriterVideoInput appendSampleBuffer:sampleBuffer];
CFRelease(sampleBuffer);
} else
{
[assetWriterVideoInput markAsFinished];
dispatch_release(queueVideo);
videoFinished=YES;
break;
}
}
}];
dispatch_queue_t queueAudio=dispatch_queue_create("assetAudioWriterQueue", NULL);
[assetWriterAudioInput requestMediaDataWhenReadyOnQueue:queueAudio usingBlock:^
{
while([assetWriterAudioInput isReadyForMoreMediaData])
{
CMSampleBufferRef sampleBuffer=[assetReaderAudioOutput copyNextSampleBuffer];
if(sampleBuffer)
{
[assetWriterAudioInput appendSampleBuffer:sampleBuffer];
CFRelease(sampleBuffer);
} else
{ …Run Code Online (Sandbox Code Playgroud) 我正在尝试将单个视频与单个图像组合在一起.这不是试图将许多图像组合成单个视频,例如
我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) 我正在尝试使用AVFoundation一起编辑视频和图像.但似乎AVAsset无法从图像文件创建?有人给我一些建议吗?
在我的应用我插入了视频轨道的编辑音轨和结果(第一,然后由AVMutableComposition由保存在一个文件中exportAsynchronouslyWithCompletionHandler).我用过AVFoundation.是否有另一个框架可用于达到相同的结果?
avfoundation ×3
iphone ×3
export ×2
ios ×2
uiimage ×2
video ×2
audio ×1
buffer ×1
objective-c ×1
swift ×1