音视频录制基础原理概念
文章目錄
- 1、錄制視頻
- 2、錄制音頻
- 3、音視頻同步
初入音視頻領域,對一些音視頻領域的概念,總是一知半解。下面將學習到的內容和自己的理解整理如下。
?
初次接觸音視頻領域時的小伙伴,可能大多數都像我一樣并不太了解整體的流程。音視頻領域細分的話,還可以分出很多分支,例如:嵌入式設備中的運用(例如設備有攝像頭和麥克風,需要進行錄制視頻和音頻)、客戶端程序的研發中的運用(例如:QQ的1V1通話和視頻,QQ群的nVn通話和視頻,還有共享屏幕等,還有某音,某手,某寶中的直播功能),還有軟件的截圖、屏幕的錄制,麥克風的錄制等等,都滲透著音視頻領域相關的技術。
?
?
在嵌入式設備中的音視頻的應用無非就是錄像,直播等。如果是錄像的話,視頻的來源可能來自于攝像頭,或者輸入的信號源,或者屏幕。音頻源可能來自麥克風等設備。
?
我現在的公司正在做的項目大概是這樣子的:
- 設備支持的音頻:內置和外置麥克風,也支持SDI和HDMI中內嵌的音頻,還支持靜音。
- 設備支持的視頻源:有HDMI接口、SDI接口、VGA、CVBS等接口,這些接口可以連接攝像頭、或者一些其他視頻源(像小米盒子,像電腦主機的HDMI輸出接口等)。
功能就是可以對這些視頻源和音頻源進行錄制,而且還支持畫中畫等功能。
?
?
引入一張0聲學院Darren老師的圖:
太好了,很方便學習者理解,就直接粘過來了
1、錄制視頻
無論你是需要錄制音頻還是視頻,都需要源(音頻源和視頻源),我們的視頻源就是攝像頭。
?
- step0:準備攝像頭;
包括
- step1:從攝像頭采集視頻數據;(圖像幀)
- 這個地方設計的知識點和技術還是挺多的,例如:采集的原始數據格式是什么類型的,是YUV還是RGB,YUV和RGB細分的話還包括YUV 4:4:4、YUV 4:2:2、YUV 4:2:0等,RGB細分的話還包括RGB565、RGB555、RGB24、RGB32、ARGB32等格式。
- 1幀可以看作為1張圖;
- 那么1秒可以采集多少幀(即1秒采集多少張圖),就會設計到幀率
- step2:圖像處理階段;
我們采集完數據之后,就可以對采集到的數據進行處理了。
例如:曝光、色度、溫和度、色差等等。都可以在這個階段做。
- step3:暫存到圖像幀隊列;
處理后的圖像幀,會暫存放到圖像幀隊列中,等待視頻編碼器來對數據進行編碼;
為什么要先存放到圖像隊列中呢?
因為我們設備(指:計算機、開發版等)并沒有這么強的處理能力,如果一擁而上的話,也就涼涼了,所以先存放著,視頻編碼階段邊處理邊拿數據。
- step4:視頻編碼階段;
如果圖像幀隊列中有數據的話,視頻編碼器就會進行處理。
如果不做編碼的話,視頻的體積是非常大的,而此階段的技術也是非常多的,還可以稱之為壓縮。
例如常見的:H.264,H.265等壓縮技術,也常叫視頻編碼算法。
我做過一個測試,將一段3 分鐘 46 秒的1920*1080的視頻的每一幀都轉換成圖片。
可以看到視頻使用的是H.264編碼的,如果將這個視頻的每一幀轉換成圖片的話,會轉換成6788張圖片。
也可以簡單計算一下:
1、一共3分46秒;
2、每秒30幀;
3分46秒等于226秒;
226秒*30幀=6780幀。
如果按照每張圖1M的話,就將近7個G,而且也不可能每個圖都是1M,圖片的大小比較還是根據色彩的鮮艷程度來決定的。
可以看到,我這個就12GB;
可想而之,一個4分鐘的視頻就12個G。
如果不壓縮的話你存幾個片到你電腦里,你能存幾個?
- 所以此階段主要就是對視頻幀進行壓縮。
- 然后把壓縮的數據放入到視頻包隊列中。
- step5:將壓縮完的數據,暫存到視頻包隊列;
- step6:復用器進行音視頻封裝(例如:封裝成mp4等);
- step7:寫入到文件。
2、錄制音頻
整個步驟和采集視頻的步驟差不多。
從麥克風中或者其他設備中采集到的音頻數據我們常稱之為PCM數據。
3、音視頻同步
音視頻同步是比較困難的。
?
我們可以在采集數據的時候,給每一幀都加上時間戳。等復用器在封裝音視頻的時候,就可以按時間來處理了,這樣就可以對音視頻數據保證同步了。
?
?
?
總結
以上是生活随笔為你收集整理的音视频录制基础原理概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个能够编写、运行SQL查询并可视化结果
- 下一篇: Webpack基础之插件