7

Dưới đây là các mã:AVAssetExportSession đem lại cho tôi một biên giới màu xanh bên phải và dưới cùng của video đầu ra

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

Tôi đã thử cài đặt chất lượng khác nhau. Tôi luôn nhận được đường viền 1-2 pixel chạy xuống phía bên phải của video và dọc theo phía dưới, bất kể video nào tôi đang cố gắng hiển thị. Điều gì có thể gây ra điều này và làm cách nào để khắc phục sự cố?

CHỈNH SỬA: Tôi không sử dụng bất kỳ loại màu xanh lá cây nào ở bất cứ đâu, vì vậy điều này phải đến từ khung công tác bằng cách nào đó.

Trả lời

10

dòng thường xanh xuất hiện sau khi cắt xén video, vấn đề là trong video width renderSize, nó phải là nhân của 16.

Dưới đây một số liên kết về điều này: apple 1 apple 2

2

Chỉ ra rằng nếu chiều rộng kích thước hiển thị của AVMutableVideoComposition không phải là số chẵn, bạn sẽ nhận được đường viền màu xanh bí ẩn. Thời gian tốt.

2

Để có được sự thích hợp độ phân giải thử một cái gì đó như thế này ... tăng nó cho đến khi số gần nhất có thể được chia cho 16:

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

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

Điều này đã làm phép thuật cho tôi (iOS9, Swift 3, iPhone 6):

Dựa trên: https://www.raywenderlich.com/94404/play-record-merge-videos-ios-swift

Thay đổi mainComposition.renderSize tới:

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

nơi mainCompositionWidth, mainCompositionHeightCGFloat s và được tính như thế này :

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 
    } 

Cũng sửa đổi scaleFitRatio trong videoCompositionInstructionForTrack chức năng để:

scaleToFitRatio = self.mainCompositionWidth/assetTrack.naturalSize.height 

Điều này khiến dòng màu xanh lá cây dưới biến mất và video đầy màn hình.

4

một giải pháp tốt hơn nhiều để có được những bội số của 16 sẽ là cách tiếp cận này:

floor(width/16) * 16 

hoặc

ceil(width/16) * 16 

tùy thuộc vào sở thích của bạn có một nhỏ hơn hoặc chiều rộng lớn hơn

+0

Cảm ơn! Điều này đã làm cho các trick cho tôi (đơn giản và dễ dàng). – smartbot

Các vấn đề liên quan