2017-06-12 30 views
0
- (void)makeVideoWithImages:(NSArray *)images seconds:(CGFloat)seconds block:(void (^)(NSString *videopath)) block { 
... 

UIImage *source = [images objectAtIndex:0]; 
CGSize size = CGSizeMake(source.size.width*source.scale, source.size.height*source.scale); 

videoSettings = @{AVVideoCodecKey : AVVideoCodecH264, 
        AVVideoWidthKey : [NSNumber numberWithInt:size.width], 
        AVVideoHeightKey : [NSNumber numberWithInt:size.height]}; 
self.outputWriter = [[AVAssetWriter alloc] initWithURL:url 
               fileType:AVFileTypeQuickTimeMovie error:&error]; 

self.outputWriterInput = [AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeVideo 
                  outputSettings:videoSettings]; 
[self.outputWriter addInput:self.outputWriterInput]; 
NSDictionary *bufferAttributes = [NSDictionary dictionaryWithObjectsAndKeys: 
            [NSNumber numberWithInt:kCVPixelFormatType_32RGBA], kCVPixelBufferPixelFormatTypeKey, nil]; 
self.bufferAdapter = [[AVAssetWriterInputPixelBufferAdaptor alloc] initWithAssetWriterInput:self.outputWriterInput sourcePixelBufferAttributes:bufferAttributes]; 
frameTime = CMTimeMake(seconds*600, 600); 

[self.outputWriter startWriting]; 
[self.outputWriter startSessionAtSourceTime:kCMTimeZero]; 

... 
} 

ビデオを合成するために上記の方法を使用すると、色が変わります。画像を使用してビデオを作成するときの色ずれAVFoundation

プレビュー効果: preview

そしてデモはここにあります。 https://github.com/qdvictory/TestForSyncthesizeVideo

誰かが原因を教えてもらえますか?

答えて

0

ビデオ設定を設定する場合videoSettingsは、(AVFoundation Video Settings Docsによると、これは廃止されるようだ)AVVideoCodecH264AVVideoCodecKeyセットを持っている - 名前が示すように - ウィキペディアで入れH.264/MPEG-4 Advanced Video Codecかなどを使用しています:

ビデオコンテンツの記録、圧縮、および配信に最も一般的に使用されるフォーマットの1つです。

以前に供給メディア:私はそれが記載されているとして、AVAssetWriterInputをこのフォーマットを使用し、ドキュメントで、私は収まるように画像を圧縮している事につながるのですときは、フォーマットを言ったことを信じ

データは処理され、出力に書き込まれます。

これは、元の形式に関係なく常にデータが圧縮(処理)されていると考えています。

画像を見ると、ビデオの色がパーティクルの周りに明るく表示されていることがわかります。写真の主なフォーカスポイントは、色がコントラストが大きく暗い背景は、損失のある圧縮が存在することを示す良い指標です。

他の非可逆圧縮形式を見ると、同様の現象が発生することがわかります。例えばJPEGのように、WikipediaのWikipediaのページには左の圧縮率が高く、右の圧縮率は低い(皮肉なことに、画像は.png形式であり、ここでは投稿できません)。画像は明らかに極端な圧縮を示していますが、あまり極端でないことを理解するのが極端であるかどうかを知ることは有益です。この例は静止画でもビデオではありませんが、何が起こっているかを見るにはまだ似ています。

解決策として...私は助けることはできませんが、私の専門知識はObjective-Cにはないと思います。しかし、あなた自身にこれを尋ねるべきです:色が100%正確であることはどれくらい重要ですか?通常のユーザーは細かい部分の些細なことに気付くでしょうか?

+0

私は 'kCVPixelFormatType_32RGBA'の色範囲を変更する可能性について考えていましたが、入力フォーマットが何であるかを説明するのではなく、変換を行っているかどうかはわかりませんでした –

+0

また、 Objective-Cは私の答えを信頼できないものにします。しかし、私は、この問題はかなり言語にとらわれないものに由来していると信じています –

関連する問題