簡體   English   中英

存儲視頻數據的最有效方法

[英]Most efficient way to store video data

為了對某些.avi文件進行一些特定的編輯,我想創建一個應用程序(使用C ++),該應用程序能夠加載,編輯和保存這些.avi文件。 但是,最有效的方法是什么? 首先考慮一下,一個簡單的3D數組似乎是最簡單的解決方案,其中每個幀都包含一個2D像素陣列。 但是,那么它的大小將是巨大的。 我的意思是,假設一個像素只需要一種顏色。 一種顏色表示3個字節(1個字符,1個字符,1個字符)。 如果我現在具有1920x1080的視頻格式,這意味着僅一幀2MEGABYTES! 如果為顏色使用指針,則該數據可能會或可能不會更小,因此使用alreay的顏色不會占用更多大小-我真的不知道,因為我對C ++和整個低級內容很陌生。 (作為比較:用Xvid編解碼器記錄的我的AVI文件之一是40秒長,30fps,只有2MB。)那么,您將如何有效地(實際上仍然)存儲視頻數據(甚至不是音頻,而僅僅是視頻)能夠輕松執行每幀更改)?

如您所知,未壓縮的視頻非常龐大,以這種方式存儲整個視頻並不現實。

視頻壓縮是一個極其復雜的主題,但其工作原理如下:某些“關鍵幀”是使用與靜止圖像壓縮(例如JPEG)相似或相同的相當標准的壓縮技術壓縮的。 通過將關鍵幀與前一幀進行比較並尋找更改(例如移動塊),可以壓縮關鍵幀之后的幀。 時不時地使用新的關鍵幀。

您實際上不必為此擔心,因為您不會編寫自己的視頻編碼器/解碼器(codec)。 有標准的。

將會發生的結果是,您的程序將逐幀解碼壓縮的視頻,並在處理它們時將一定數量的幀保留在內存中,然后在完成時對其重新編碼。 以未壓縮的形式,您將可以訪問各個像素,並可以按需要對其進行處理。

您可能不會自己一個人做,這很困難。 您可能需要使用諸如OpenCV之類的框架。 這些框架中內置了大量標准過濾器和工具,可能您想要執行的操作已在某處實現。

OpenCV框架可以返回Mat對象中的各個幀,然后可以訪問像素。 看到這篇文章從Mat獲取像素

OpenCV的

教程頁面: 打開CV教程

暫無
暫無

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

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