7

下面的代碼:AVAssetExportSession給我上輸出視頻的右側和底部的綠色邊框

AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:mixComposition presetName:AVAssetExportPresetHighestQuality]; 
     exporter.outputURL = outputUrl; 
     exporter.outputFileType = AVFileTypeQuickTimeMovie; 
     exporter.videoComposition = mainComposition; 
     exporter.shouldOptimizeForNetworkUse = YES; 
     [exporter exportAsynchronouslyWithCompletionHandler:^{ 
      //completion 
     }]; 

我已經嘗試了不同的質量設置。無論我嘗試渲染什麼視頻,我都會在視頻的右側和底部獲得一個1-2像素的邊框。有什麼可能導致這種情況,我該如何解決?

編輯:我沒有在任何地方使用任何種類的綠色,所以這必須以某種方式來自框架。

回答

10

通常綠線出現,問題是在視頻renderSize寬度,它應該是16

這裏是一些鏈接這個乘法: apple 1 apple 2

2

原來,如果AVMutableVideoComposition的渲染大小寬度不是偶數,就會得到神祕的綠色邊框。美好時光。之後,視頻裁剪

2

爲了得到正確的決議嘗試這樣的事情......遞增,直到可以被16整除的最接近的數字:

computedVideoSize=self.view.frame.size.width; 

while (computedVideoSize%16>0) { // find the right resolution that can be divided by 16 
    computedVideoSize++; 
} 
2

這確實神奇,我(iOS9,斯威夫特3, iPhone 6):

基於: https://www.raywenderlich.com/94404/play-record-merge-videos-ios-swift

更改mainComposition.renderSize到:

mainComposition.renderSize = CGSize(width: self.mainCompositionWidth, height: self.mainCompositionHeight) 

其中mainCompositionWidthmainCompositionHeightCGFloat的 S和計算這樣:

self.mainCompositionWidth = UIScreen.mainScreen().bounds.width 
    self.mainCompositionHeight = UIScreen.mainScreen().bounds.height 

    while (self.mainCompositionWidth%16>0) { // find the right resolution that can be divided by 16 
     self.mainCompositionWidth = self.mainCompositionWidth + 1.0 
    } 

    while (self.mainCompositionHeight%16>0) { // find the right resolution that can be divided by 16 
     self.mainCompositionHeight = self.mainCompositionHeight + 1.0 
    } 

而且修改scaleFitRatiovideoCompositionInstructionForTrack功能:

scaleToFitRatio = self.mainCompositionWidth/assetTrack.naturalSize.height 

這使得底部的綠線消失和視頻充滿屏幕。

4

一個好得多的解決方案,使16多會是這樣的方法:

floor(width/16) * 16 

ceil(width/16) * 16 

根據您的具有較小或較大的寬度

+0

謝謝你的喜好!這對我來說很簡單(簡單而簡單)。 – smartbot

相關問題