2017-08-31 10 views
0

ビデオをフレームにトリミングしようとしていますが、ビデオの自然なサイズのスケールに合わせて縮尺を変えています。すべての種類の狂った変換を処理せずにビデオをトリミングする簡単な方法がありますか?ビデオをフレームにクロップする

AVVideoComposition(asset:applyingCIFiltersWithHandler:)のフレームをトリミングして、ビデオの構成を変更することはできますか?renderSize

もしそうでない場合は、代替手段はありますか?

答えて

0

すべては、動画のレンダリング方法によって異なります。 AVSampleBufferDisplayLayerを使用する場合は、プロパティーを「videoGravity」から「AVLayerVideoGravityResizeAspect」に設定します。その後、>

 CGFloat w = self.videoPreviewView.drawableWidth; 
     CGFloat h = self.videoPreviewView.drawableHeight; 
     CGFloat previewAspect = w/h; 
     CGRect drawRect = rect; 
     drawRect.origin.y += (drawRect.size.height - drawRect.size.width/previewAspect)/2.0; 
     drawRect.size.height = drawRect.size.width/previewAspect; 

そして、あなたはまた、AVMakeRect(Swift3は、Obj-を忘れてしまった方法を使用することができます[self.ciContext drawImage:image inRect:CGRectMake(0, 0, w, h) fromRect:drawRect];

を使用してレンダリング -

あなたがCVImageBufferRefCVPixelBufferRefまたはCIImageからレンダリングする場合、私はこれを行いますCのような名前) - >

let yourDrawableFrame:CGRect = AVMakeRect(aspectRatio: video.size, insideRect: theViewToRenderIn.frame) 

あなたの質問に答えてくれましたか?あなたはどのプレイヤー/方法を使って達成したいか?

私は、このファイルをエクスポートしたい

/アンダース

+0

、注意が必要ですが、右の寸法にトリミング。この文脈はどこから来たのですか?これをAVVideoConpositionInformationとして設定できますか?これは、風景のビデオと、どのように肖像画かもしれないが、いくつかの層のマスクを考慮に入れますか? – IHaveAQuestion

+0

あなたが求めているのは、再生中に簡単にトリミングや操作ができるため、複雑で通常は不要です。ビデオをトリミングして新しいファイルとして保存する場合は、最初にデコードする必要があります。その後、トリミングしてエンコードして新しいファイルとして保存します。私はhttps://developer.apple.com/library/content/samplecode/AVBasicVideoOutput/Introduction/Intro.html#//apple_ref/doc/uid/DTS40013109-Intro-DontLinkElementID_2を見ていきます。ピクセルをつかんでください。 –

+0

上記のトリミング計算を使用してください。たとえば、 - > https://github.com/manishganvir/iOS-h264Hw-Toolboxをエンコードします。 なぜクロップされたビデオを保存する必要がありますか?なぜプレーするときに作物だけではないのですか? –

関連する問題