Q:我采用ffmpeg調用x264一直出錯,命令如下
ffmpeg -s 352x288 -r 50 -pix_fmt yuv420p?? -i tmp.yuv tmp.h264
可不可以給點建議,找了很久也沒有找到解決辦法,錯誤時error while opening encoder for output stream 0.0 maybe incorrect parameters,先謝了
A。-vcodec libx264 沒加?
加了也是一樣
你把 x264編進去沒
ffmpeg -s 176x144 -pix_fmt yuv420p -r 30 -b 200000 -i foreman_part_qcif.yuv -vcodec libx264 new1.h264
-qmin 10 -qmax 51 -qdiff 4 -me_range 16 -keyint_min 25 -qcomp 0.6
?
boradcasting 或者 streaming 的應用,CBR都首要優先滿足的條件
現在那些高清電視臺為什么要使用占用幾十兆的資源的mpeg2 ts流來播放,一個主要原因就是因為h.264沒有真正cbr,而mpeg2就有
streaming 應用其實也能處理一定程度的VBR,但是在某些時候,為了處理VBR碼流的不穩定帶來的開銷遠遠超過它帶來的好處,不如用CBR,甚至多花幾倍的存儲和帶寬都無所謂
一直很困惑,CBR這種在boradcasting 和 streaming的大型工業級的應用上非常重要的東西,h.264是怎么考慮的
1、VBR 適合的應用場景是媒體存儲,而不是網絡傳輸,因此不要讓武狀元去當文官;
2、其實實際網絡傳輸中所謂的 CBR 一般都是 ABR(平均比特率),即只要是單位時間內把碼率控制在額定碼率就可以了,因為編碼輸出本來就有緩沖可以起到平滑波動的作用;
3、你所謂的嚴格意義上的 CBR 是每一幀都分配同樣的碼字,試想一下,如果某一幀所需要的碼字本來就很少,而你卻一定要給它分配很多碼字,那不是浪費么?另一方面,如果某一幀所需要的碼字本來就多,而你卻給得很少,那這幀的效果會很差。這樣編下來,整體序列質量會忽好忽壞地不停發生跳變,反而對視覺沖擊很大;因此 ABR 才是最適合網絡傳輸的方案;
4、無論是 CBR、ABR 還是 VBR 都是屬于碼率控制,而碼率控制是視頻編碼的開放部分,它不會改變碼流結構的合法性,因此無論在 MPEG2、MPEG4 還是 H.263、H.264 當中都沒有做規定;
5、由于目前的視頻編碼標準都是基于塊編碼的混合編碼框架,因此一個碼率控制算法可以用到任何協議上(當然有時候需要做點小的改動),只不過是控制效果好不好的問題,沒有哪個 RC 是專屬哪個協議的。
樓主的需求就是一種非常硬性的CBR碼率控制解決方案,這種解決方案要做到每一個幀的輸出比特幾乎相同(或誤差相當小,甚至小到可以忽略不計)。上面諸多同仁的討論中已經指出,通過插入(無效的)比特來填充幀編碼的比特是一種合理的解決方案,我也認為這可能是必要的一種解決方法了。
我是這樣考慮這個問題的:
其一:如果不計編碼次數,我們可以對確定的一幀枚舉若干給定QP值的編碼結果,然后選取不超過但最接近目標比特率的幀編碼QP,再填充無效比特;也可以在選擇出QP值的基礎上,做宏塊級枚舉QP,微調QP值,以達到更接近目標比特率。這樣的一種解決方案想來沒有人會喜歡,因為反復編碼次數太多,效率太低。但是這種方法可以近最大可能地保留有效比特。
其二:按照樓主的這個需求和您給出的圖示,我發現您的應用在1280X534,甚至是1080p。目標比特率以Mkbps為單位,在24Hz和30Hz,在高清畫質上做編碼。我的經驗是,如果給定的比特率足夠高,即將此問題放在中高帶寬下的碼率控制的討論中,則樓主的問題才具有現實的意義。因為中高比特率下的碼率控制要比中低比特率下的好控制的多。
我對這個問題非常感興趣,若有空閑希望做進一步的深入。稍早些時候我也考慮過這個問題,但是限于知識面太窄,不清楚具體是否有價值作這個問題。樓主在討論中給出的應用需求和相關背景非常具有參考意義。
我希望給樓主請教一個問題:我看到你給出的圖是用bitrate viewer 這個應用程序作圖。以前我沒有見過,效果還挺好。我想問,這個應用程序是您自己寫的還是哪里可以提供的呢?
今晚太困,話不成句,若有閑暇,后作修訂。