2012-04-15 38 views
3

我一直在嘗試使用FFmpeg的X11grab模塊錄製截屏視頻,目前爲止它的工作或多或少都很好。我知道a/v編碼是一個複雜的過程,有很多細節,但我正在盡我所能學習。FFmpeg截屏錄像:使用哪些編解碼器?

我想對視頻流進行「輕量級」錄製,在錄製流時儘可能減少系統壓力。我用pacat和sox分別記錄兩個音頻流。後來,整個事情被過濾,規範化,編碼,並組合成一個Matroska容器。

現在,我有ffmpeg記錄一個rawvideo流被送到x264的yuv4 demuxer。我之前用ffv1和直x264錄製進行了實驗。我的系統無法使用x264處理我想要的最終流的設置的實時編碼,因此一旦記錄完成後我必須單獨進行再壓縮。我發現ffv1給了我可怕的丟幀,而yuv4也是如此,但更少。我懷疑這是由於硬盤驅動器的速度所致,即使我坐在SATA3魚子醬黑色中,專門用於存放錄製的數據。

問題是,我應該看看哪些視頻編解碼器的組合?直接在x264上記錄,並在以後重新壓縮到「更好」x264?原始視頻,然後壓縮?我將如何去尋找問題,例如我遇到的幀丟失問題?

編輯:這是我目前使用的ffmpeg行。

ffmpeg -v warning -f x11grab -s 1920x1080 -r 30000/1001 -i :0.0\ 
-vcodec rawvideo -pix_fmt yuv420p -s 1280x720\ 
-threads 0\ 
recvideo.y4m 
+0

屏幕錄像的分辨率是多少? – 2012-04-16 00:52:03

+0

我以1080p錄製整個屏幕,並在飛行中縮放至720p。 – mkaito 2012-04-16 14:38:09

+0

https://trac.ffmpeg.org/wiki/StreamingGuide提到一些不錯的編解碼器使用 – rogerdpack 2015-10-28 16:52:52

回答

3

您試過http://en.wikipedia.org/wiki/Huffyuv

你知道你的問題是CPU還是磁盤帶寬?您試圖寫入磁盤的數據速率是多少? ffmpeg在你的編解碼器上的比特率和設置需要多少CPU?我假設你不記錄電腦閒置 - 它有多少資源留給記錄?

對於測試磁盤寫入perf,只需分配100MB,從/dev/urandom中讀入100MB,並在磁盤空閒時將緩衝區寫入該磁盤上的文件。測量寫入需要多長時間(從urandom讀取需要時間)。 Linux有回寫,這意味着它每5秒就會將髒頁面刷新到磁盤上,而不是一刻就寫。使用fdatasync(或完整的fsync)將爲您提供實時數據直到磁盤上。

爲什麼你不能看到ffmpeg的CPU使用情況?如何記錄顯示top的終端窗口的分鐘?如果沒有,那麼perf record -a sleep 60在終端上怎麼樣,然後切換到你所做的,記錄一分鐘,然後是perf report

編輯:我用avconv -v warning -f x11grab -s 1680x1050 -r 30000/1001 -i :0.0 -vcodec ffvhuff -s 1280x720 -threads 0 capture.mkv,它很好地記錄在RGB。然後,您可以在YUV中以離線格式轉換爲H.264格式,雙通道達到最高質量等等。我的速度大約爲24MB /秒,但似乎是單線程的。我的Core2 @ 2.3Ghz很好用。

+0

是的,我試過huffyuv。在錄製過程中,我將四個內核中的兩個專用於ffmpeg。另外,我的問題的一部分是關於確定我擁有的問題,這意味着我不知道它是CPU還是HDD相關。我也不確定如何找到用於寫入磁盤的數據速率。 – mkaito 2012-04-16 14:40:48

+1

您正在將RGB(原生像素)轉換爲YUV。嘗試使用RGB錄製。使用CPU應該與在錄製時運行'top'(或'htop',或'perf record -a sleep 60' from linux tools)一樣簡單。以每秒字節數爲單位的磁盤寫入速率是您在一分鐘內記錄的文件大小除以60.磁盤應該能夠以100MB /秒的速度寫入(如果僅用於此目的,並且不執行其他任何工作,包括讀取,這導致它尋求)。 – 2012-04-16 15:25:47

+0

YUV4不喜歡(A)RGB像素格式。 x264除了原始的y4m流之外不會吃任何東西,ffmpeg會在告訴它使用x264時自動選擇yuv420p。視頻文件大小大致爲每分鐘2.30Gb。這意味着它的寫入速度約爲40Mb/s。 htop報告指派給ffmpeg的核心每個都需要大約30%的加載。 – mkaito 2012-04-16 17:23:56