FFmpeg 不規則轉碼

FFmpeg 不規則轉碼

一直在為一位朋友設置一個類似於我的錄音版本,但儘管有足夠的(據我所知)硬件,但我似乎無法實時工作。

系統規格:8600K、GTX 1050ti、16Gb RAM、1tb 860 EVO

測試命令(為簡單起見更新):

ffmpeg -y -hide_banner -thread_queue_size 9999 -f dshow -rtbufsize 2147.48M -video_size 1920x1080 -framerate 60 `
-i video="@device_pnp_\\?\usb#vid_07ca&pid_0570&mi_00#7&3886ab1a&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global" `
-thread_queue_size 9999 -f dshow -rtbufsize 2147.48M -video_size 1920x1080 -framerate 60 `
-i video="@device_pnp_\\?\usb#vid_07ca&pid_0570&mi_00#7&24df76f&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global" `
-map 0 -c:v h264_nvenc -r 60 -preset: llhp -pix_fmt yuv420p -b:v 1M -minrate 1M -maxrate 1M -bufsize 1M `
C:\Users\Jordan\Videos\FFmpeg\Left\Left.ts `
-map 1 -c:v h264_nvenc -r 60 -preset: llhp -pix_fmt yuv420p -b:v 1M -minrate 1M -maxrate 1M -bufsize 1M `
C:\Users\Jordan\Videos\FFmpeg\Right\Right.ts

此指令的目標是記錄 2 個獨立的同步輸出。但是,由於某種原因,此命令無法即時對視訊進行轉碼,當您嘗試錄製而不是簡單地轉換檔案時,這是一個大問題。當我省略兩個輸出之一或將每個輸入/輸出的解析度減半時,一切都會即時進行。這會讓我相信系統中的某個地方存在瓶頸,但是當在任務管理器中監控所有內容時,沒有任何東西接近上限(GPU 編碼器、CPU、RAM 和 SSD 使用率低於 30%)。

此外,當我嘗試透過 OBS 將兩個串流錄製在 4K60 影片中時,效果非常好,就像即時一樣。所以我不明白在 FFmpeg 中轉碼兩個 1080p60 流會比在 OBS 中轉碼一個 4K60 流更密集...

此後我將 1050ti 換成了 GTX 1080,性能沒有任何差異。這會讓我相信 CPU 出了問題。看起來 FFmpeg 確實只使用了 1-2 個線程...有什麼方法可以強制它使用更多線程嗎? -threads 似乎沒有任何影響,無論我將其註入命令的何處。真正奇怪的是我有一個非常相似的命令,但我正在執行兩個4K60 流,而不是使用GTX 1080 和6800K 執行兩個1080p60 流......據我所知,與GTX 1080 相比, 8600K 的每線程性能更高6800K 所以我不知道我如何能夠擺脫這麼多。

任何見解都將受到高度讚賞。

答案1

問題出在採集卡上,我從他的系統中取出一張並將其放入我的系統中,並且能夠複製該問題。我的任何其他採集卡都無法重現此情況,我有 4 個採集卡。

這個問題似乎是由儲存在卡片本身上的 Avermedia 流引擎膨脹軟體引起的。該卡實際上顯示為兩台設備,一台名稱中沒有流引擎,另一台有,如果您選擇問題得到緩解但仍然存在的一台。不管怎樣,我可以確認 Elgato 的 HD60 Pro 上不存在這個問題,我們已經訂購了其中 2 台。

回想起來,臃腫軟體/非常規韌體很容易解釋極難診斷的問題。幸運的是,我們以優惠價格購買了 Avermedia Live Gamer HD 2,並且可以轉售它們以獲得全額退款,很好的擺脫。

相關內容