這是一個碼率計算程序,主要用于輔助分析、比較不同壓縮參數對碼率分配的影響,支持AVI和RMVB
視頻碼率計算器(BitrateCurve)特點
可以計算出每一秒鐘的碼率,便于分析不同壓縮參數對碼率分配的影響。
可以計算碼率分布頻數和分布概率。
可以計算碼率的統計特征量,包括最大值、最小值、平均值、標準差、變異系數等。
可以對文件格式進行分析,顯示AVI、RMVB的相關文件信息。
可以同時分析兩個文件,便于比較。
結果可以存為TXT文件,也可以存為Excel文件。如果是在Windows 98/Me下運行本軟件,請將TXT文件與某個支持長文件的文本編輯器相關聯,缺省的記事本程序只能打開32 KB的文本。Windows 2000/XP無此限制。
可以批量檢查RM文件,看其中是否存在碼率為0的情況。
視頻碼率計算器(BitrateCurve)常見問題
Q:BitrateCurve有什么用?
A:對于普通大眾來說,BitrateCurve有以下用處:
1、可以快速檢查下載到的RM文件是否有播放不過去的地方:打開RM文件,如果在中間部分連續出現幾秒碼率為0的情況(軟件顯示最小碼率為0,界面上會出現對應的紅燈),通常在播放的時候那里就會播不過去。對于AVI文件來說,由于本軟件直接讀取索引段,沒有逐包讀取movi段,因此不能用這種方式判別文件的好壞。
2、可以通過“文件信息”查看一些壓縮時的參數,供自己壓片時參考。
而對于一小撮喜歡折騰的人士來說,BitrateCurve也可以幫助他們宣泄靈魂深處強烈的自虐欲望:
1、可以很方便地查看到碼率最大、最小的地方,實際觀看這些地方的畫面效果,然后據此調節壓縮時的碼率參數(包括最大碼率、平均碼率等),重新壓縮,也就是常說的“好片子要壓三遍”。
2、可以同時顯示AVI片源和RM文件的碼率曲線,比較雙方在碼率分配方面的差異。
3、可以同時顯示兩個片源相同、參數不同的AVI文件或RM文件,從而比較壓縮參數對碼率分配的影響。
無論如何,軟件不過是個工具而已,它真正的作用,與使用者密切相關,就象同樣一支毛筆,在我手里一文不值,到了名畫家手里則價值千金。如果您還發現這個軟件有什么特別的作用,歡迎與我聯系。
Q:為什么要開發BitrateCurve?
A:原因很簡單:我見過太多人對RMVB的壓縮參數進行爭論,每個人都在引經據典,說明不同的參數對碼率分配的影響如何如何,但是卻沒有人能夠拿出實際的數字,證明實際的碼率究竟是如何分配的。DOOM9上也有人發表過一個計算RMVB碼率分布的軟件RMVB Analyser,可惜我每次運行這個軟件都會出錯,所以才決定開發這個軟件,而且連AVI的碼率也一起分析,便于比較RMVB及其AVI片源的差異。
Q:BitrateCurve支持哪些格式?
A:目前支持AVI和RMVB。由于計算碼率的時候不需要解碼,因此不需要在機器上安裝相應的codec。
Q:為什么AVI和RMVB的速度會差那么多?
A:原因很簡單:在AVI文件的index段中,已經包含計算碼率所需的關鍵信息,因此讀取這一小段數據就可以了。RMVB的index段中信息不足,因此只能把整個文件從頭讀到尾。
Q:BitrateCurve收費嗎?
A:BitrateCurve是一個“友情軟件”(Friendware),用戶在承諾不用于商業目的,也不對文件及其附件進行任何更改的條件下,不需要為使用該軟件付任何費用,最多是在某個討論區看到我發帖子灌水時(我的ID一般是strnghrs),進去捧個人場,作為友情回報;或者在年節時發個email問聲好(所以叫“友情軟件”)。我承諾絕不在程序中暗藏任何商業廣告、木馬,但不承諾為使用BitrateCurve的后果承擔任何責任。如果您需要將它用于商業目的,或加入您的網站,請與我聯系,否則保留追究一切責任的權利。
視頻碼率計算器(BitrateCurve)使用方法
一、軟件安裝/刪除
本軟件安裝非常簡單:創建一個目錄,用WinZip將下載下來的ZIP包解壓縮到該目錄即可。
本軟件的刪除也很簡單:刪除從ZIP包中解壓縮出來的所有文件即可。
ZIP包中包括下列文件:
BitrateCurve.exe。這是軟件的主程序。
BitrateCurve.htm。本幫助文件。
如果您下載到的ZIP包中還包括其它文件,毫無疑問不是我放進去的,有廣告之嫌疑,請立即刪除。
另外程序允許過程中還會生成下列文件:
BitrateCurve.ini。這個是配置文件,改變輸出選項后自動生成。
BitrateCurve_chk.txt。批量檢查RM文件時的缺省輸出文件。
二、軟件使用
軟件的使用比較簡單,按照軟件界面上提示的1、2、3步驟操作即可。
對輸出內容的解釋參見技術探討。
視頻碼率計算器(BitrateCurve)注意事項
一、所謂碼率
對于流媒體,碼率(bitrate)可以定義為:單位時間內流過的數據量,單位通常采用kb/s(千比特/秒)。
這里所謂“流過”,其實就是指codec對數據進行處理。不過一般說的恒定碼率(CBR)碼率、可變碼率(VBR),都是針對編碼后的數據流,不針對解碼后的數據流。解碼后的數據流碼率通常為一個恒定值(例如解碼后的視頻碼率=長×寬×色深×fps),不在本文和本軟件的探討范圍之內。
碼率最簡單的計算公式就是:碼率=文件總長度/播放時間
這個公式的物理含義是:codec在播放時間內,需要將整個文件處理完。當然這樣算出來的只是一個粗略的平均數,不能反映實際碼率在每一秒的變化。而且由于文件中除了音頻、視頻數據外,還包含其它數據,因此按上面這個公式計算出來的碼率會比真正的平均碼率稍大。
本軟件所計算的,就是編碼器壓縮生成的數據流的實際碼率,不僅有平均碼率,還有每一秒的碼率,便于對數據流量進行定量分析。
不過對于大多數普通人來說,在說到“碼率”的時候,AVI和RMVB又略有不同:RMVB文件是音頻、視頻一起編碼的,所以它的碼率,通常是包含音頻、視頻的總碼率;而AVI文件的音頻、視頻通常是分開壓縮,最后才合成到一起,因此一般人在說到AVI的碼率時,指的多半只是視頻的碼率。
本軟件可以計算視頻、音頻、視頻+音頻的碼率。輸出的時候,可以選擇輸出全部或只輸出某一種碼率。
二、AVI碼率計算
AVI流的碼率計算基本思想是:算出fps(frames per second)值,然后順序獲取每一幀的壓縮數據量,將1秒內的所有幀的壓縮數據量加在一起,就是這一秒的碼率。需要注意的是AVI文件的fps值通常是一個浮點數,因此會出現某一幀橫跨兩秒的情況(如對于fps=23.976的AVI文件來說,第24幀就從第1秒尾延續到第2秒頭),計算時需要按照跨越的比例在前、后秒間進行分配。如果將fps圓整成整數,不僅計算結果不精確,而且對于播放時間比較長的片子,還可能出現最后幾秒沒數可算的窘況。
獲取幀數據量的方式通常有3種:
使用微軟提供的vfw(video for windows)接口。對于視頻流,這種方法是最方便的,但是音頻流經常不能逐幀讀取,因此不能用這種方法計算音頻流的碼率。
使用微軟提供的mmio接口,按照RIFF格式解析AVI文件。這種方法要求對AVI文件結構非常了解。
使用第三方源代碼,然后在需要的地方進行更改。這個應該是比較省事,也比較靠得住的一種方案。本軟件就參考了guliverkli開源項目下的AviSplitter源代碼。
為了省事,也為了加快讀取速度,本軟件直接從AVI文件的"idx1" 段讀取包長度,這種方式與vfw的處理方式是一樣的,不過如果AVI文件中沒有索引,或索引出了問題,用本軟件讀取的數據也會出錯。幸好常用的AVI制作、編輯軟件Nandub是支持索引的,所以只要是用它合成的AVI,能夠正常播放就能用本軟件計算碼率。
由于計算碼率的時候不需要解碼,因此不需要在機器上安裝相應的codec。
三、RMVB碼率計算
RMVB的碼率計算方法與AVI類似,不過RMVB的Index Record中不包括包(package)長,因此只能逐包讀取RMVB數據,在包頭信息中有包的時間戳,根據時間戳、包長度,累加即可計算出每一秒內需要處理的總數據長度,即碼率。由于包頭有時間戳,因此在計算RMVB碼率的時候,沒有必要計算fps值。不過要注意的是RMVB文件的數據包可能出現跨秒的情況(如前一包的時間戳是1738,后一包的時間戳是2049,則前一包的數據可以認為從前1秒尾跨越到后1秒頭),計算時需要按照跨越的比例在前、后秒間進行分配。
RMVB的解析接口我原本以為Real公司會提供,但是看了半天SDK幫助也不得要領,最后接受cool18的建議,參考了guliverkli開源項目下RealMedia Splitter的源代碼實現。
四、統計特征量
為了從統計學的角度對碼率進行分析,本軟件提供了碼率分布和統計特征量計算。
碼率分布(Bitrate distribution)包括三列:碼率(Bitrate,單位為kb/s),頻數(Frequence),百分比(Percent)。它的含義是:在整個片子中,碼率從多少到多少的時間一共有幾秒,在全片中占百分之幾。例如下面這段輸出:
Bitrate Freq. Percent
< 400 3 10.3%
< 500 9 31.0%
< 600 5 17.2%
< 700 5 17.2%
< 800 4 13.8%
< 900 1 3.4%
< 1000 0 0.0%
< 1100 0 0.0%
< 1200 2 6.9%
其含義為:碼率小于400的地方有3處,占全片的10.3%;碼率在400~500之間的有9處,占全片的31.0%;碼率在500~600之間的有5處,占全片的17.2%,依此類推。
為了簡化輸出,本軟件只提供視頻流的碼率分布。分布間隔自動計算,計算依據有兩個:
間隔為100 kb/s的倍數。
間隔區間不超過10個。太多的區間只會使人眼花繚亂。
在本軟件中,以計算出來的各秒碼率為統計樣本,對以下統計指標進行了計算:
Max:最大值。
Min:最小值。
Average:平均值。
Standard deviation:標準差,反映樣本的變化程度。理論上說,標準差適用于對稱分布,特別是正態或近似正態分布。我沒有時間,也沒有興趣去做碼率是否符合正態分布的假設檢驗,在這里加上這個指標,只不過是出于某種不可救藥的職業習慣。如果您認為碼率分布不是對稱分布,可以忽略標準差和變異系數這兩個特征量。
Coefficient of variation:變異系數=標準差/平均值。在兩組(或幾組)資料均數相近、度量單位相同的條件下,標準差大,表示觀察值的變異度大,即各觀察值離均數較遠,均數的代表性較差;反之,表示各觀察值多集中在均數周圍,均數的代表性較好。若比較度量單位不同或均數相差懸殊的兩組(或幾組)觀察值的變異度時,需計算變異系數進行比較。
由于第一秒、最后一秒的數據很難準確計算,與其它數據相比往往偏差比較大,因此在計算統計特征量時,這兩個時間點上的數據不參與運算。
附錄A 鳴謝
本軟件在開發過程中參考了下列代碼,在此表示感謝:
AVI、RMVB碼率計算部分分別參考了guliverkli開源項目下的AviSplitter和RealMedia Splitter。
Excel文件輸出部分采用了Andrei Litvin的Saving Excel 2.1 Workbook。
曲線繪制部分采用了Juan Carlos Sanchez的Scroll Chart Control。
AVI文件的視頻、音頻解碼器名稱來自AVIcodec。
RMVB文件信息輸出參考了Alexey Pavluchenko的rma (RealMedia Analyzer)的-d命令。
視頻碼率計算器(BitrateCurve)更新日志
Version 1.03
錯誤修正:在顯示某些AVI文件的“文件信息”時,只能顯示到視頻編碼。
Version 1.02
新增功能:批量檢查RM文件,看其中是否存在碼率為0的情況。
新增功能:在AVI文件的“文件信息”中,可以按時間顯示視頻流長度(原先只顯示幀),便于合并AVI時計算字幕起始時間點。
Version 1.01
新增功能:“文件信息”,可以顯示文件頭信息、流信息,用于對文件格式進行分析。
新增功能:在輸出TXT文件時,在文件頭加入版本信息。
新增功能:在碼率列表中突出顯示碼率最大、最小的5個(點數可設置)點,及0碼率點。
新增功能:打開RM文件時,如果發行有0碼率點,則用紅燈突出顯示。
功能修正:AVI文件的fps值通常是一個浮點數,因此會出現某一幀橫跨兩秒的情況(如對于fps=23.976的AVI文件來說,第24幀就從第1秒尾延續到第2秒頭),以前版本在計算時這種幀的數據量會全部歸于后一秒,從本版本開始改為按照跨越的比例在前、后秒間進行分配。因此計算出的碼率數據可能會略有不同,但是碼率曲線的整體趨勢應該不變,對統計特征量的影響也不大。
功能修正:RMVB文件的數據包可能出現跨秒的情況(如前一包的時間戳是1738,后一包的時間戳是2049,則前一包的數據可以認為從第1秒尾跨越到第2秒頭),以前版本在計算時這種跨秒包的數據量會全部歸于前一秒,從本版本開始改為按照跨越的比例在前、后秒間進行分配。因此計算出的碼率數據可能會略有不同,最明顯的例子是音頻碼率曲線更接近于完美的直線。
功能修正:由于第一秒、最后一秒的數據很難準確計算,與其它數據相比往往偏差比較大,因此在計算統計特征量時,這兩個時間點上的數據不再參與運算。
Version 1.00
同步發行簡體中文、英文版本。
新增功能:顯示碼率列表、碼率曲線。
錯誤修正:在計算AVI文件的時長時,由于舍入誤差,有時會多計1秒,這1秒的碼率為0,因此會影響統計特征量的計算。
錯誤修正:如果同時打開的兩個片子播放時間不同,則短少的時間段內的碼率為隨機數。
錯誤修正:文件打開對話框重定位后,底部空白太多。
Version 0.00 beta
實現碼率計算、碼率分布計算、碼率統計特征量計算。
支持AVI、RMVB格式。
支持同時顯示兩個文件。
支持TXT和Excel輸出。
- PC官方版
- 安卓官方手機版
- IOS官方手機版