2015-10-14 361 views
3

我必須從視頻文件中提取所有幀,然後將它們保存到文件中。 我試圖使用AVAssetImageGenerator,但它非常慢 - 每幀(樣本1280x720 MPEG4視頻)需要1s - 3s,而不保存到文件處理。iOS從視頻中提取所有幀

無論如何要讓它更快? OpenGL,GPU,(...)?

我將非常感謝您向我展示正確的方向。

+0

如果你打算在iOS設備上這樣做,我相信它會消耗更多的資源。從gif文件開始,嘗試將其轉換爲單個幀,然後轉換爲更高格式。 –

回答

3

AVAssetImageGenerator是一個隨機訪問(搜索)接口,並且需要時間,所以一個優化可以使用一個AVAssetReader,這將快速並順序地爲你提供幀。你也可以選擇使用yuv格式,這會給你更小的幀(我認爲)更快的解碼。

但是,那些原始幀非常龐大:1280px * 720px * 4字節/像素(如果在RGBA中),每個像素大約爲3.6MB。如果你想保留所有的內容,你需要一些非常嚴重的壓縮(想到MPEG4 @ 720p)。

那麼你想達到什麼目的?

您確定要以108MB/s(30fps)或864MB/s(240fps)的速率填滿用戶的磁盤嗎?

+0

因此,在基本場景中,我想保存視頻,但從原始幀中刪除了一些幀後(沒有任何過濾器,單幀編輯等)。 – user2262230

+1

好的,在這種情況下,您應該通過'AVAssetReader'讀取幀,並有條件地使用'AVAssetWriter'將其中一些幀寫入另一幀。 –