5

我使用AVCaptureSession錄製視頻,會話預設爲AVCaptureSessionPreset640x480。我在非標準尺寸(300 x 300)下使用AVCaptureVideoPreviewLayer,並在錄製時將重力設置爲縱向填充。它的設置是這樣的:導出與預覽圖層大小相匹配的AVCaptureSession視頻

self.previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:_captureSession]; 
_previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; 
_previewLayer.frame = _previewView.bounds; // 300 x 300 
[_previewView.layer addSublayer:_previewLayer]; 

在錄製視頻後,我想以快速格式將其寫入文件。在播放過程中,我再次以300 x 300的非標準尺寸圖層播放視頻。由於這些視頻最終將通過網絡連接進行傳輸,因此保留完整的640x480視頻看起來很浪費。

導出視頻以匹配我的300 x 300預覽圖層的最佳方式是什麼?我是AVFoundation noob,所以如果我以錯誤的方式討論這個問題,請告訴我。我只是希望錄製過程中預覽圖層中顯示的錄製視頻與磁盤上導出的視頻相匹配。

+0

我認爲這[答案] [1]應該可以幫助你。 [1]:http://stackoverflow.com/a/16910263/2315453 – arunit21 2013-06-04 05:31:57

回答

10

視頻分辨率和視頻大小是兩回事。分辨率表示清晰度,分辨率越高表示清晰度越高。而視頻大小是顯示視頻的邊界。根據視頻的視頻分辨率和寬高比,視頻會在觀看者看到時伸展或縮小。

現在的事實已經說明,你可以在這裏找到答案:

How do I use AVFoundation to crop a video

執行順序的步驟:

  1. 視頻錄製到硬盤。
  2. 從磁盤保存到資產庫。
  3. 從磁盤刪除。
  4. 執行上述鏈接中提到的步驟。

注:記錄和寫您的視頻資源庫,saveComposition是保存資產後執行的步驟。

,並提供你的尺寸在此步驟:videoComposition.renderSize = CGSizeMake(320, 240);videoComposition.renderSize = CGSizeMake(300, 300);

以及建議。由於將文件寫入磁盤,然後寫入磁帶庫,然後再回到磁盤是一種漫長的操作。嘗試使用一個dispatch_queueoperationBlock

異步使用這樣做,乾杯,玩得開心。

+0

它是否爲你工作??? – croyneaus4u 2013-02-11 12:44:37

+0

我會將其標記爲最好的答案,因爲它有幫助,但我仍然無法使鏈接的作物代碼正常工作。 – user2393462435 2013-02-15 13:22:16

+0

你不能裁剪視頻?問題是什麼 ?? – croyneaus4u 2013-02-15 14:16:20

相關問題