隨筆 - 8  文章 - 55  trackbacks - 0
          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          朋友的Blog

          最新評論

          閱讀排行榜

          評論排行榜

          mediaxyz訪談錄:ffmpeg的碼率控制

          mediaxyz是一位研究ffmpeg有三年的高人了,這幾天一直在折騰ffmpeg中的x264,就是不知道該如何控制碼率,主要是參數太多,也不知道該如何設置,在google上search了一下,這方面的介紹為0,那就找mediaxyz請教請教吧,這些可都是經驗,非常寶貴!

          以下是與mediaxyz在QQ上聊天的記錄,只有一部分,因為QQ把之前的談話刪除了,但基本上精髓都可這里了。

          mediaxyz 23:40:26
          你說的qsable是c->global_quality吧
          Leon 23:40:44
          br值的設定規則,是100kbps 就為 100*1024 吧?
          mediaxyz 23:41:07
          yes
          mediaxyz 23:41:26
          你有沒有發現,ffmpeg是100*1000
          mediaxyz 23:41:37
          并不是100*1024
          Leon 23:41:28
          是的,
          Leon 23:42:13
          我看到有這樣一句話:
          ? ?qscale 以<數值>質量為基礎的VBR,取值0.01-255,越小質量越好

          mediaxyz 23:42:30
          而且在后面的處理中還是/1000
          mediaxyz 23:42:43
          是的
          mediaxyz 23:42:51
          越小質量越好,碼率越大
          Leon 23:42:55
          那0.01-255范圍也太大了吧!
          mediaxyz 23:43:29
          這是為了精細控制,實際上沒必要
          mediaxyz 23:43:42
          我測試0。01-50就可以了
          mediaxyz 23:43:52
          再大圖像很糟糕
          Leon 23:43:55
          global_quality有什么作用?
          mediaxyz 23:44:18
          反正老外總是想的很周到
          mediaxyz 23:44:35
          global_quality你說的 <數值>質量
          Leon 23:44:36
          就是我說的qscale值?
          mediaxyz 23:45:01
          是的
          Leon 23:45:01
          這個值能不能動態的調整?
          mediaxyz 23:45:56
          我沒有試過
          mediaxyz 23:46:07
          按照ffmpeg的調用規則,好像不行
          Leon 23:46:32
          按照你的說話,VBR設定如下幾個值就可以了:
          c->flags |= CODEC_FLAG_QSCALE;
          c->rc_min_rate =min;
          c->rc_max_rate = max;
          c->bit_rate = br;

          br是平均碼率
          是這樣嗎?
          mediaxyz 23:47:06
          是的
          mediaxyz 23:47:51
          也就是這樣設置的碼率會在Min,max之間波動
          mediaxyz 23:48:11
          如果設置qscale,則波動范圍是非常大的,
          mediaxyz 23:48:21
          c->rc_min_rate =min;
          c->rc_max_rate = max都控制不了
          Leon 23:48:27
          明白了
          Leon 23:48:29
          還有一個幀率的問題,在x264編碼方式下,我設定了5幀,為什么不起作用?
          AVRational time_base;
          time_base.num = 1;
          time_base.den = 5;
          c->time_base= time_base;
          mediaxyz 23:49:05
          你是實時,還是轉碼?
          Leon 23:48:55
          實時
          mediaxyz 23:49:23
          轉碼不行
          mediaxyz 23:49:27
          實時可以控制
          mediaxyz 23:49:38
          控制的方法就是控制圖像捕獲的幀率傳入就行了
          mediaxyz 23:49:48
          靠x264本身不行
          Leon 23:49:42
          呵呵,明白了!
          Leon 23:50:04
          我本想靠ffmpeg來控制的,就是不行!
          mediaxyz 23:51:12
          幀率控制是說:播放是的幀率
          Leon 23:51:03
          在ffmpeg中,time_base只是起到一個時間戳增量的作用,并不能控制幀率,對吧!
          mediaxyz 23:51:31
          不管你選擇5還是10,時間戳是按照播放設置的
          mediaxyz 23:52:11
          播放的時候,讀取這個按照5或者10計算的時間戳才設定播放時間區間,這個時候才其作用
          Leon 23:53:21
          如果輸入的流是25幀,而我設的確是5,會產生什么后果嗎,我這兒的測試結果是沒有什么影響?
          mediaxyz 23:53:37
          不過ffmpeg的碼率控制對x264不起作用
          mediaxyz 23:53:53
          不會
          Leon 23:54:02
          ffmpeg的碼率控制對x264不起作用?按照前面的設定了也不能控制x264的碼率?
          mediaxyz 23:54:30
          如果是實時捕獲的,則捕獲程序會丟棄
          mediaxyz 23:54:42
          這些情況我都測試過了
          mediaxyz 23:55:07
          本想寫個ffmpeg心得,實在沒有時間
          Leon 23:55:10
          如果是實時捕獲的,則捕獲程序會丟棄?如何理解?
          mediaxyz 23:56:09
          捕獲程序有一個緩存,如果到特定時間,還沒有把緩存中的數據清空,則自動丟棄
          mediaxyz 23:56:23
          directshow,vfw都是這樣的
          Leon 23:56:16
          我現在想通過實時采集的視頻,用x264編碼,采用VBR,就是你前面說的幾個參數設定,能起作用嗎?
          mediaxyz 23:56:57
          那你最好采用第二種方法
          Leon 23:57:01
          就是:
          c->flags |= CODEC_FLAG_QSCALE;
          c->rc_min_rate =min;
          c->rc_max_rate = max;
          c->bit_rate = br;??
          mediaxyz 23:57:29
          錯了
          mediaxyz 23:57:32
          是第一種
          mediaxyz 23:57:34
          (2006-04-16 23:30:54)? ?mediaxyz(17328860)
          c->bit_rate = br;
          ? ? ? ? ? ? ? ? c->rc_min_rate =br;
          ? ? ? ? ? ? ? ? c->rc_max_rate = br;??
          ? ? ? ? ? ? ? ? c->bit_rate_tolerance = br;
          ? ? ? ? ? ? ? ? c->rc_buffer_size=br;
          ? ? ? ? ? ? ? ? c->rc_initial_buffer_occupancy = c->rc_buffer_size*3/4;
          ? ? ? ? ? ? ? ? c->rc_buffer_aggressivity= (float)1.0;
          ? ? ? ? ? ? ? ? c->rc_initial_cplx= 0.5;??
          Leon 23:57:29
          why?
          mediaxyz 23:57:56
          第一種波動太大
          mediaxyz 23:58:09
          說糊涂了,不好意思
          mediaxyz 23:58:14
          第二種波動太大
          Leon 23:59:20
          可是波動太大也就其好處,當畫面靜止時,碼流就很小,活動時,碼流才上來,是這樣的嗎?
          mediaxyz 23:59:49
          是的
          mediaxyz 23:59:58
          如果是網絡上傳輸,這種情況就慘了
          Leon 00:00:12
          我認為:網絡上傳輸,這種情況應該更合適
          mediaxyz 00:00:32
          “碼流才上來”,上來的可能會非常大
          mediaxyz 00:00:52
          是的,更合適,如果非常大,怎么辦?
          Leon 00:01:24
          非常大?不是通過c->rc_max_rate = max;可以控制其最高碼率嗎?
          mediaxyz 00:02:15
          我剛才說,理論上是這樣的,但ffmpeg實際沒有實現
          mediaxyz 00:02:19
          ffmpeg的缺點
          Leon 00:02:21
          max就是我預計網絡能承載的最大負荷。
          Leon 00:02:31
          喔,然來如此!
          mediaxyz 00:03:02
          ffmpeg中的h263,h263p比mpeg4要控制的好
          mediaxyz 00:03:07
          x264更糟糕
          mediaxyz 00:04:39
          睡覺了,改天再聊
          Leon 00:04:32
          不過在同等碼率下,x264的視頻質量要比其它的都好,比較的細膩。但其編碼的效率不高。
          mediaxyz 00:05:13
          windows的x264已經非常不錯了
          Leon 00:05:18
          如果你不介意,我把今天的內容發到論壇上,也算是你的經驗吧!
          mediaxyz 00:05:54
          無所謂
          Leon 00:05:46
          晚安!
          2006-4-17 12:16 AM #1
          查看資料 ? ? 發短消息 ? 頂部
          ?
          admin
          管理員
          Rank: 9Rank: 9Rank: 9



          UID 1
          精華 0
          積分 0
          帖子 294
          閱讀權限 200
          注冊 2006-4-3
          狀態 在線
          得出的結論:
          ffmpeg中CBR(固定碼率控制)的設置:
          ? ?? ?? ?? ?? ? c->bit_rate = br;
          ? ?? ?? ?? ?? ? c->rc_min_rate =br;
          ? ?? ?? ?? ?? ? c->rc_max_rate = br;??
          ? ?? ?? ?? ?? ? c->bit_rate_tolerance = br;
          ? ?? ?? ?? ?? ? c->rc_buffer_size=br;
          ? ?? ?? ?? ?? ? c->rc_initial_buffer_occupancy = c->rc_buffer_size*3/4;
          ? ?? ?? ?? ?? ? c->rc_buffer_aggressivity= (float)1.0;
          ? ?? ?? ?? ?? ? c->rc_initial_cplx= 0.5;

          ffmpeg中VBR(可變率控制)的設置:
          ? ?? ?? ?? ?? ? c->flags |= CODEC_FLAG_QSCALE;
          ? ?? ?? ?? ?? ? c->rc_min_rate =min;
          ? ?? ?? ?? ?? ? c->rc_max_rate = max;
          ? ?? ?? ?? ?? ? c->bit_rate = br;
          2006-4-17 12:19 AM #2
          ? ? 發短消息 ? 頂部
          ?
          admin
          管理員
          Rank: 9Rank: 9Rank: 9



          UID 1
          精華 0
          積分 0
          帖子 294
          閱讀權限 200
          注冊 2006-4-3
          狀態 在線
          剛才經過實驗,得出如下結論:

          ffmpeg的CBR可以控制得非常好,與設定值br十分接近
          ffmpeg的VBR控制得非常不好,最高碼流max沒有限制住

          與mediaxyz的說話完全吻合。

          感謝mediaxyz奉獻如此寶貴的經驗。
          posted on 2006-06-26 17:36 blog搬家了--[www.ialway.com/blog] 閱讀(2465) 評論(0)  編輯  收藏 所屬分類: ffmpeg
          主站蜘蛛池模板: 册亨县| 奉新县| 华亭县| 谷城县| 韶关市| 镇坪县| 岱山县| 大厂| 汽车| 乡宁县| 赤城县| 遵化市| 宝山区| 深泽县| 县级市| 吉安市| 府谷县| 东宁县| 疏勒县| 澄城县| 昆明市| 称多县| 连江县| 拜城县| 偏关县| 鹰潭市| 黎城县| 抚远县| 鄂伦春自治旗| 吴旗县| 朝阳市| 虹口区| 凤阳县| 武宣县| 陕西省| 米泉市| 鹤壁市| 连平县| 西林县| 宜章县| 泰顺县|