簡體   English   中英

在iPhone上錄制灰度視頻的方法?

[英]approach for recording grayscale video on iphone?

我正在構建一個需要錄制灰度視頻並將其保存到相機膠卷的iPhone應用程序。 我很難理解如何最好地接近這一點。

我在考慮以下幾點:

  1. 使用着色器和opengl將視頻轉換為灰度
  2. 使用AVFoundation(AVAssetWriter和AVAssetWriterInputPixelBufferAdaptor)將視頻寫入文件。

我的問題是:

  1. 這是正確的方法(最簡單,最佳性能)嗎?
  2. 如果是這樣,那么從opengl輸出到AVAssetWriterInputPixelBufferAdaptor的CVPixelBufferRef輸入的最佳方法是什么?
  3. 如果沒有,那會是更好的方法嗎?

任何推動正確的方向非常感謝!

總的來說,我同意這種方法。 在OpenGL ES 2.0着色器中進行處理應該是像這樣進行視頻幀更改的最高效方式,但這不會非常簡單。 幸運的是,您可以從已經存在的模板開始。

您可以使用我在此處編寫的示例應用程序(並在此處進行說明)作為基礎。 我在此示例中使用自定義着色器來跟蹤圖像中的顏色,但您可以輕松地將其更改為將視頻幀轉換為灰度(我甚至看到有人這樣做過一次)。 將攝像機視頻輸入紋理並對其進行處理的代碼可以從該樣本中逐字使用。

在該應用程序中的一個顯示選項中,我首先將處理后的圖像渲染到幀緩沖對象,然后使用glReadPixels()將生成的圖像拉回到我可以在CPU上使用的字節。 您可以使用它在GPU處理完幀后獲取原始圖像數據,然后將這些字節輸入CVPixelBufferCreateWithBytes()以生成用於寫入磁盤的CVPixelBufferRef。

(編輯:2/29/2012)作為對此的更新,我剛剛在我的開源GPUImage框架中實現了這種視頻錄制,因此我可以評論編碼部分的具體性能。 事實證明,您可以從相機捕獲視頻,對其進行實時過濾,使用glReadPixels()從OpenGL ES中獲取視頻,然后在iPhone 4上以30 FPS將其寫為640x480幀中的實時H.264視頻(最大相機幀率)。

為了獲得這種錄制速度,我需要做一些事情。 您需要確保將AVAssetWriterInputPixelBufferAdaptor設置為使用kCVPixelFormatType_32BGRA作為輸入像素緩沖區的顏色格式。 然后,當使用glReadPixels()時,您需要使用顏色混合着色器重新渲染RGBA場景以提供BGRA輸出。 如果沒有這種顏色設置,您的視頻錄制幀速率將降至iPhone 4的5-8 FPS,使用它可輕松達到30 FPS。 您可以查看GPUImageMovieWriter類源代碼,以了解有關我如何執行此操作的更多信息。

使用GPUImage框架,可以通過簡單地創建GPUImageVideoCamera,附加飽和度設置為0的GPUImageSaturationFilter的目標,然后附加GPUImageMovieWriter作為其目標來處理上述過濾和編碼任務。 該框架將為您處理OpenGL ES交互。 我做到了這一點,它在我測試的所有iOS設備上運行良好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM