2011-09-11 69 views
22

我需要最大化速度轉換時使用FFmpeg的視頻到H264FFmpeg中的線程數選項用於快速轉換爲h264?

  • 任何輸入格式的源視頻
  • 用戶的機器可以有任意數量的核
  • 電源和內存消耗是非問題

當然,有一大堆選項這可以調整,但這個問題是關於選擇最好的-thread <count>選項。我試圖找到一個理想的線程數作爲功能

  • 沒有。的核心
  • 輸入視頻格式
  • h264-friendly values maybe?
  • 上面還有其他東西錯過了嗎?

我知道默認-thread 0遵循一個線程每核心的方法,這應該是最佳的。但我不確定這是時間還是空間優化。另外,在某些測試用例中,我看到更多的線程(比如我的雙核心測試機上的4個線程)比默認的更快。

任何其他方向,比如配置選項w.r.t.線程,值得追求?

+4

它是-threads x not -thread x。 – Gp2mv3

回答

1

如果您的'雙核'具有超線程,那麼2個核心可能是正確的。虛擬內核數量不會超過(包括超線程),但也許是由於FFmpeg中的內部問題,這可能是事實。

13

我發現threads在利用所有內核方面做得並不好,超線程根本無法使用。我可以想到的一個解決方案是並行運行3到4個ffmpeg進程,請參閱:https://superuser.com/questions/538164/how-many-instances-of-ffmpeg-commands-can-i-run-in-parallel/547340#547340該方法最終完全使用所有內核,並且比單個命令選項中的單輸入多輸出更快。

+0

你是否明確地將'threads'鎖定爲1或者將它保留爲0(某些人稱它爲auto或'optimal')? – emkman

0

我已經對線程0,6,12,24進行了徹底的實驗,它在幀速率,總體處理時間或CPU利用率方面沒有任何差異。注意我的系統也有12個物理內核。一般來說,它似乎很好地利用你的處理能力,而無需指定線程,在觀看頂級/系統監視器期間,我的12個內核基本上可以使用98-99%的時間。

我希望有一個神奇的子彈,但現在沒有其他的方法來加快速度,因爲ffmpeg目前在我看來是非常好的。唯一的選擇只是獲得更多的計算能力或進行分佈式處理。

*注意我所有的測試都使用ffmpeg版本3.3.1