2016-01-03 59 views
2

我在C語言中有一大塊視頻處理代碼,這似乎是我可以從ffmpeg管道讀取字節速率的瓶頸。使用libavformat比使用popen調用ffmpeg更快嗎?

我需要解碼到fvmpeg或潛在的libav *提供的rawvideo幀。

與使用libav庫相比,在fread調用一個受控子進程ffmpeg時是否有很大的開銷?

回答

2

這裏有幾個方面。首先,爲什麼看起來你的應用程序受到ffmpeg管道輸入的瓶頸?答案可能很簡單:因爲ffmpeg需要更多的CPU(因此是兩個應用程序組合的瓶頸)。如果你運行一個| b和a需要更多的CPU,然後從b的角度來看,來自管道的輸入很慢。這是合乎邏輯的,因爲a需要更多時間。有沒有解決這個,ffmpeg是假設採取更多的CPU,因爲(取決於什麼編解碼器/分辨率等),多媒體處理一個非常CPU密集型任務。

其次,會使用C API而不是管道幫助嗎?這取決於你在做什麼。如果你使用ffmpeg來完成一個相當簡單的任務,比如從磁盤讀取文件而不解壓(例如未壓縮的視頻/音頻),那麼是的,管道的開銷相當大。如果ffmpeg解壓縮H264/HEVC或VP9視頻,你不太可能看到這一舉措的收益,或者他們至少很小(1%範圍),因爲大部分時間都花在解碼視頻上。數據的複製/傳輸幾乎可以忽略不計。所以在這種情況下,問題是:1%是否值得?這取決於你自己決定。