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