Raspberry Pi 相機模塊:有關影片捕捉的更多信息|奧斯丁國際有限公司 OURSTEAM Internationl
icon教學資源
2023/07/24

Raspberry Pi 相機模塊:有關影片捕捉的更多信息

Raspberry Pi 相機模塊:有關影片捕捉的更多信息

祝大家#MagPiMonday快樂。我們的工程師 David Plowman 帶著另一篇教程回到了最新一期的 The MagPi。這次,我們發現了使用 Raspberry Pi 相機模塊捕獲影片的深入設置。

我們在上個月結束的相機模塊教程中認識了 libcamera-vid ,並了解瞭如何錄製短影片剪輯。與 libcamera-still 一樣,libcamera-vid 有更多選項用於控制我們捕獲的影片的分辨率、幀速率和其他方面,我們將在本教程中發現其中的一些選項。



更改影片分辨率和幀速率
 
默認情況下,libcamera-vid 將以 640×480 像素的分辨率捕獲影片。但可以使用 --width和--height參數輕鬆更改此設置(就像 libcamera-still 一樣)。例如,如果您想拍攝 1920×1080 像素(稱為“全高清”)的影片,請使用:


除非下文另有說明,1920×1080 像素的這一特定分辨率應被視為
影片中可以捕獲的最大分辨率。

因為我們現在討論的是影片,所以我們也可以要求不同的幀速率。默認情況下,libcamera-vid 將提供每秒 30 幀 (fps)。我們可以使用以下參數請求不同的幀速率--framerate:


只要相機能夠快速傳輸幀,這將以 50 fps 錄製 720p 影片(否則您將獲得相機可以提供的最大幀速率)。


影片編碼器和文件格式

影片與靜態圖像一樣,通常在保存到磁盤之前進行壓縮。事實上,壓縮影片幀更為重要,因為如果有數百或數千幀,輸出文件的大小將會爆炸。


壓縮後,影片幀被寫入具有特定“容器格式”的文件中。可以選擇如何組織文件中的影片幀,尤其是因為文件中還可以包含其他數據(例如音頻),並且容器格式準確定義了播放軟件如何訪問和解碼信息。

H.264 文件

libcamera-vid 使用的默認編碼器是 H.264 影片編碼器。有特殊的硬件來支持這一點,因此它結合了良好的性能和良好的壓縮。壓縮後,幀將直接背對背寫入我們通常稱為“H.264”文件的文件,並且按照慣例通常用文件擴展名“.h264”表示它。

值得注意的是,這些 H.264 文件非常簡單;它們並不是真正的容器格式。也就是說,您無法將音頻數據與影片混合,並且影片幀甚至沒有與之關聯的計時信息。對播放此類文件的支持可能會受到限制,即使支持,軟件也必須猜測影片的幀速率。

流行的媒體播放器軟件 VLC 曾經支持 H.264 文件格式,但最近不再正確播放它們。因此,我們推薦其他程序,例如 FFplay。

我們已經了解瞭如何以不同的分辨率錄製影片;另一個有用的選項是比特率參數(--bitrate或只是比特率參數-b)。這控制了創建的影片文件的大小,從而控制了壓縮量和感知質量。比較以下內容:



…相對:



每秒 1,000,000 位(每秒 1 兆位,或 1Mb/s)影片(“bad.h264”選項)比 9Mb/s“好”影片顯示出更多令人反感的壓縮偽影。




MJPEG 文件

我們之前已經遇到過用於壓縮靜態圖像的 JPEG 圖像編碼器。沒有什麼可以阻止您(非常快地)壓縮一張又一張靜止圖像並將它們連續保存以創建影片文件。這正是 MJPEG 文件。

然而,也有一些缺點。MJPEG 文件格式是有機發展起來的,因此對於如何格式化其中的 JPEG 缺乏一些明確的決定。通常它們運作良好,但支持可能有點不穩定。

要創建並保存 20 秒的 MJPEG 文件,請使用以下命令:



有必要指定--codec獲取正確 MJPEG 文件的選項 - 單獨更改文件名是不夠的。使用與 libcamera-still 相同的 JPEG 編碼器,它支持相同的 JPEG 質量參數(--quality或-q),儘管在影片文件中我們通常可以使用較低的值 - 實際上默認值只有 50。MJPEG 文件將忽略由--bitrate(或-b)。

您可以使用 ffplay 播放 MJPEG 文件:



與 H.264 文件相比,MJPEG 文件可以以大於 1920×1080 像素的分辨率進行錄製,但提高分辨率會降低 libcamera-vid 可以保持的幀速率,從而導致丟幀並可能導致影片斷斷續續。



未壓縮的影片文件

大多數影片壓縮格式都是“有損”的,這意味著您保存的影片與原始相機圖像相比會有一定程度的質量損失。因此,也可以保存完全未壓縮的影片,但需要注意的是這些文件可能會變得非常大,並且您需要確切地知道打算如何使用它們。

要捕獲未壓縮的影片,請使用--codec yuv420以下選項:


這裡相對較小的尺寸(320×240像素)意味著文件大小不會爆炸得太快,而且系統不會陷入試圖將大量數據寫入磁盤的困境(這很容易變得非常慢) )。

請記住,與往常一樣,該--codec選項是必要的,並且僅更改文件名是不夠的。

最後,輸出文件的格式是每個未壓縮圖像幀的簡單轉儲,一個接一個。它們採用“YUV420 planar”格式,您需要理解它才能使用它。這些文件的使用超出了本指南的範圍,不建議初學者使用。

未壓縮的影片文件也沒有分辨率限制(如 H.264 文件一樣),但由於寫入的數據量較大,大分辨率很快就會成為瓶頸。




MP4 文件、音頻和其他容器格式

我們已經看到,H.264 和 MJPEG 影片文件並非沒有某些限制。支持最好的影片文件格式可能是 MP4 文件,libcamera-vid 可以直接創建這些文件,如果您有麥克風,甚至可以在音頻流中混合。

要創建 MP4 文件,我們必須選擇不同的編解碼器。它仍將使用 Raspberry Pi 的硬件 H.264 編碼器,但將通過第三方庫訪問它,該第三方庫將處理 MP4 容器。

要錄製不帶音頻的 MP4 文件,請使用:


到目前為止,我們看到的常用選項(--timeout、--width、--height、--bitrate)都將​​像以前一樣工作,儘管本教程後面討論的其他選項不會(除非另有說明)。

要創建帶有音頻流的 MP4 文件,請使用:


這將對音頻及其編碼方式做出某些合理的默認選擇;請參閱我們的在線文檔了解更多詳細信息。

“libav”編碼器可以處理其他容器格式,例如 MKV 文件或 MPEG2 傳輸流。可以直接通過網絡傳輸後者。請參閱我們的在線文檔以獲取更多信息。


暫停和恢復錄音

當然,您可以通過停止 libcamera-vid (例如使用CTRL+C)來暫停和恢復影片錄製,並在您想要恢復錄製時再次重新啟動它。但是您可能還記得如何讓 libcamera-still 在按下按鍵時捕獲圖像,並且我們可以讓 libcamera-vid 以同樣的方式暫停或恢復錄製。

我們還需要涵蓋更多選項:

-t 或libcamera-vid 將運行的時間長度(以毫秒為單位)。如果您要按某個鍵來終止應用程序,則該值通常可能為零。 --timeout

-k 或按ENTER鍵在錄音和不錄音之間切換。輸入“x”並按ENTER退出。 --keypress

--initial隨後暫停或錄音。這會在暫停(即未錄製)或錄製狀態下啟動 libcamera-vid。按ENTER鍵將分別開始或暫停錄音。

--split每次恢復錄製時,錄製都會開始寫入新的輸出文件。

--inline告訴 libcamera-vid 在它寫入的每個文件的開頭插入某些額外的標頭信息。使用該選項時通常應包含此內容--split。

-o 或輸出文件的名稱。當我們使用該選項時,我們通常希望每個輸出文件具有不同的名稱,因此我們可以使用與 libcamera-still 的 timelapse 選項相同的“計數器語法”。例如,將寫入輸出文件test_000.h264、test_001.h264、test_002.h264等。 --output--split-o test_%03d.h264

讓我們嘗試一個例子:


這將以暫停狀態啟動 libcamera-vid,因此它還不會記錄任何內容。當按下ENTER時,它將開始錄製video_000.h264。再次按ENTER時會暫停,第三次按ENTER時開始錄製video_001.h264 。這將無限期地進行下去,直到鍵入“x”並按ENTER為止。


記錄響應信號

對於熟悉 Linux 信號的人來說,按下按鍵的另一種方法是發送信號。為此,只需使用-sor--signal代替-k(or --keypress)。

要將記錄/暫停信號發送到 libcamera-vid,請首先啟動它,然後在另一個終端窗口中鍵入以下內容:


你可以強制 libcamera-vid 退出:


這應該很熟悉,因為它符合 libcamera-still 的行為!


其他錄音選項

libcamera-vid 還有許多其他參數,我們將在這裡簡要介紹其中的一些參數。

循環緩衝器輸出

一項有用的功能是能夠將錄製的影片流持續寫入 Raspberry Pi 內存中的緩衝區。這是一個有限的大小,當它填滿時,緩衝區中最早的數據將被逐出,以為新幀騰出空間。當 libcamera-vid 退出時,該循環內存緩衝區將刷新到磁盤。這使您可以讓相機無限期地運行,但當發生某些導致程序停止的事件時,僅保存最後幾秒鐘的數據。

讓我們看一個例子:


這將無限期地運行,寫入循環內存緩衝區,當用戶鍵入“x”並按ENTER時,程序將在將最後 8MB(兆字節)數據保存到文件circular.h264後退出。該內存緩衝區的大小由選項後面的數字(以兆字節為單位)決定--circular。

如果您願意,可以使用--signal代替。--keypress


計時信息

我們之前提到過 H.264 格式文件如何不包含計時信息。libcamera-vid 允許將此信息輸出到單獨的文件以供以後使用或分析。

在這裡,我們只是指定--save-pts選項後跟一個文件名,其中從影片開始的幀時間以文本形式存儲(以毫秒為單位)。例如:


文件timestamps.txt(對於每秒 30 幀的錄製)將如下所示:

# timecode format v2
0.000
33.332
66.664
99.996


…等等。


自動對焦和高動態範圍

在撰寫本文時,僅 Raspberry Pi 相機模塊 3 支持自動對焦和高動態範圍成像。該支持與 libcamera-still 中的支持非常接近。

自動對焦

使用相機模塊 3 時,自動對焦在連續模式下自動啟用。這意味著相機鏡頭將在必要時移動以保持對圖像中心部分的最佳聚焦,這可能是大多數用戶大多數時候想要的。

還可以關閉自動對焦並手動設置鏡頭的焦點位置。為此,請使用該--lens-position參數,並向其傳遞一個以“屈光度”為單位測量的值,即焦距的倒數。因此,要在約 0.1 m 的非常近的距離處聚焦,請傳入值 10(即 1 / 0.1)。要聚焦於無窮遠,請傳入 0(通俗地說,即 1 / 無窮大的值)。您也可以傳入非整數值。例如:


...將把焦點位置設置為兩米並且不再移動鏡頭。


高動態範圍成像

相機模塊 3 支持高動態範圍 (HDR) 成像。要使用它,請--hdr在命令行上指定選項,例如


請注意,非 HDR 捕獲可以以 4608×2592 像素的最大分辨率進行,但 HDR 捕獲由於支持 HDR 所需的傳感器的特殊性,僅限於 2304×1296 像素(正好是寬度和高度的一半)非HDR 模式)。無論如何,H.264 影片文件僅限於 1920×1080 像素,因此此限制通常不相關。


MagPi #131 現已推出!

您現在就可以從 Tesco、Sainsbury's、Asda、WHSmith 和其他報刊經銷商(包括劍橋的Raspberry Pi 商店)購買最新一期 。它也可以在我們的在線商店購買 ,該商店向世界各地發貨。您還可以通過我們Android 或 iOS上的應用程序獲取它 。



您還可以訂閱The MagPi 的印刷版。我們不僅在全球範圍內提供,而且訂閱六個月或十二個月印刷版訂閱的人還可以獲得免費的 Raspberry Pi Pico W!

免費的 PDF 文件將在三週內提供。請參照議題頁面 了解更多詳細信息。



原文出處: https://www.raspberrypi.com/news/raspberry-pi-camera-module-more-on-video-capture/
logo
iconiconiconiconicon
icon  電話:04-2375-3535
icon  傳真:04-2256-9949
icon  統編:90386785
icon  E-mail:service@oursteam.com.tw
icon  LINE ID:@oursteam
Inspire every child to create