我有一個視頻錄製在藍色屏幕上。透明視頻iPhone
有沒有辦法讓它在iOS設備上透明?我知道我可以用像素着色器和OpenGL來做,但是恐怕解碼視頻幀/上傳OpenGL紋理和消除像素着色器碎片的過程將會太慢。
有什麼建議嗎?
我有一個視頻錄製在藍色屏幕上。透明視頻iPhone
有沒有辦法讓它在iOS設備上透明?我知道我可以用像素着色器和OpenGL來做,但是恐怕解碼視頻幀/上傳OpenGL紋理和消除像素着色器碎片的過程將會太慢。
有什麼建議嗎?
如果你的意思是你想渲染視頻,但將藍色像素設置爲透明,那麼唯一有效的方法就是使用OpenGL。這對於iOS設備應該很容易實現,視頻解碼在硬件中處理,並且我有幾個項目,我使用glTexSubImage2D
將視頻幀傳輸到OpenGL,工作正常。
是的,看起來像openGL是唯一的方法來做到這一點,但我不知道如何獲得源像素上傳我的紋理,對此有什麼建議嗎? – 2012-03-16 16:59:30
檢查2010年的WWDC示例代碼,有一個名爲GLVideoFrame的示例項目。否則檢查SquareCam示例項目,它會完成大部分工作。基本上你只需要使用'CVPixelBufferGetBaseAddress'獲得一個指向像素數據的指針。 – Tark 2012-03-20 10:26:02
這聽起來像你想要與你的視頻做一些色度鍵控。我只是增加了對我的GPUImage框架執行此操作的功能,正如名稱所示,此框架使用基於GPU的處理來執行這些操作,速度比CPU綁定的過濾器快許多倍。
框架中的SimpleVideoFileFilter示例顯示瞭如何加載電影,對其進行過濾並將其編碼回磁盤。修改該執行色度鍵給出以下:
NSURL *sampleURL = [[NSBundle mainBundle] URLForResource:@"sample" withExtension:@"m4v"];
movieFile = [[GPUImageMovie alloc] initWithURL:sampleURL];
filter = [[GPUImageChromaKeyBlendFilter alloc] init];
[filter setColorToReplaceRed:0.0 green:0.0 blue:1.0];
[filter setThresholdSensitivity:0.4];
[movieFile addTarget:filter];
UIImage *inputImage = [UIImage imageNamed:@"background.jpg"];
sourcePicture = [[GPUImagePicture alloc] initWithImage:inputImage smoothlyScaleOutput:YES];
[sourcePicture addTarget:filter];
NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Movie.m4v"];
NSURL *movieURL = [NSURL fileURLWithPath:pathToMovie];
movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(480.0, 640.0)];
[filter addTarget:movieWriter];
[movieWriter startRecording];
[movieFile startProcessing];
[movieWriter setCompletionBlock:^{
[filter removeTarget:movieWriter];
[movieWriter finishRecording];
}];
上面的代碼將來自應用程序的資源稱爲sample.m4v
加載一個電影,它送入一個設置有靈敏度關閉純藍色的加鍵的色度鍵濾波器爲0.4,附加背景圖像用於色度鍵控,然後將所有內容發送到電影編碼器,該編碼器在應用程序的/Documents
目錄中寫入Movie.m4v
。
您可以根據需要調整閾值和特定藍色色調,並根據需要將輸入圖像替換爲其他電影或其他來源。這個過程也可以應用於iOS設備攝像頭的實時視頻,如果需要,您可以將結果顯示在屏幕上。
在運行iOS 5.0的iPhone 4上,色度鍵控對於640x480幀視頻需要1.8 ms(500+ FPS),對於720p幀(15 FPS)需要65 ms。較新的基於A5的設備比這些操作的速度快6-10倍,因此他們可以在不打破汗水的情況下處理1080p視頻。我使用iOS 5.0的快速紋理緩存來進行幀上傳和檢索,這加快了該操作系統版本上的處理速度。
我對此有一個警告,那就是我還沒有把音頻錄製到我的電影編碼中,但我現在正在處理這個問題。
請密切投票者解釋投票嗎? – 2012-03-15 10:36:28
投票結束這個問題可能是因爲這兩個副本:http://stackoverflow.com/questions/4796626/iphone-display-a-semi-transparent-video-on-top-of-a-uiview, http://stackoverflow.com/questions/1401517/iphone-sdk-how-to-play-a-video-with-transparency。但重複是舊的(2和1年),所以這裏可能有新的東西。 – 2012-03-15 11:36:03
你正在嘗試做比你需要的更多的工作。使用現有桌面視頻軟件包處理視頻,以刪除藍屏並生成帶有Alpha通道的視頻。然後,你有2個選項用於帶有Alpha通道的視頻。你可以使用一個支持alpha通道的庫(AVAnimator,Bink,你可以找到其他的),或者你可以按照這個問題描述的方式編碼2通道h.264 http://stackoverflow.com/questions/10815805/mpeg-4-和-α-透明度 - 正在進行的傳奇#答案-17072503 – MoDJ 2013-06-25 20:27:19