2012-05-12 26 views
2

我有一個Delphi 6應用程序,可以從機器人傳入的視頻和音頻流中創建電影。 PC將視頻流作爲一系列JPEG幀接收,將音頻作爲PCM音頻數據塊接收。我正在使用Windows AVIFile函數(AVIStreamCreate等)來創建電影。對於視頻壓縮器的選擇,我使用AVISaveOptions()功能,並讓用戶從系統中可用的壓縮器中選擇一臺。例如:Microsoft Video 1,Radius的Cinepak Code等。注意其他一些可用的,如Microsoft H.263或H.261會因AVIERR_BADFORMAT錯誤而失敗,因此我無法使用它們進行測試。音頻使用GSM 6.10壓縮器​​進行壓縮。使用Windows AVIFile函數的Delphi 6應用程序提高壓縮率?

問題是我似乎無法獲得接近壓縮比率的信息,我可以使用Adobe Premiere等工具進行比較。請注意,我知道Premiere正在使用與我的不同的整體流程進行壓縮,並使用不同的文件格式,如MPEG或Quicktime等。但是,如果可以,我希望獲得可比的壓縮比率。無論我從AVISaveOptions()中選擇哪種壓縮器,無論壓縮器的可用壓縮質量設置如何低(例如,Microsoft Video 1壓縮質量的時間質量比&),都需要一分鐘的時間視頻最終會創建一個大小約爲14MB的AVI文件。爲了便於比較,我可以使用Adobe Premiere創建的文件尺寸小於1 MB,並且質量看起來差不多(換句話說,對於我的目的來說已經足夠了,我並不在乎實際的質量損失。) 。

如果我檢查我使用Windows AVI API的輸出文件,我發現沒有使用壓縮器更改的設置會影響幀速率。它始終與輸入幀速率相同。現在,如果有必要的話,我可以在輸入端放置幀,但這會有點麻煩,因爲它與音頻同步,如果可以,我想避免這種情況。

但更重要的是數據速率。無論壓縮機設置如何低,我都無法達到約2.3 kbps以下的速度。我用Premiere創建的視頻以及其他播放的視頻具有健壯的文件大小和持續時間比例,都大約爲1.2 kbps。

總的來說,我的AVI文件的文件大小和我用Premiere或其他人創建的文件大小之間的差異已經發送給我,壓縮好的是10到1。因此,我的壓縮比是其他視頻文件的10倍,而其他文件的視頻質量沒有不愉快的差異。

我能做些什麼來獲得可比的壓縮比率?

UPDATE:David Heffernan的回覆包含一個快速解決方案,適合我。我強調這一點,因爲它也包含重要許可警告。對於像我這樣的人,爲了讓用戶儘可能方便地使用XVid編解碼器,請閱讀下面的文章。它包含有關如何再利用用戶的壓縮機的選擇,與他們所選擇的壓縮配置選擇一起,在將來的會話的指令,而無需再次打擾用戶:

http://msdn.microsoft.com/en-us/magazine/hh580739.aspx

對於好奇,在尺寸變化從我之前輸出的AVI文件大小到使用XVid編解碼器創建的文件是12.231 MB到632 KB並且視頻質量更合理。

回答

2

真正簡單的答案是安裝XVID編碼器。 Windows提供的編解碼器都不適合您的目的。 XVID既高質又免費。

關於分配和許可的影響,該XVID FAQ有這樣一段話:

我可以一起分發Xvid的我的私有程序?

如果您的程序在運行時調用Xvid功能,這是派生的工作,因此,GPL的條款適用於包括您的程序在內的整個工作。所以不,你不能將Xvid與專有程序一起發佈。如果你想分發,你還必須在GPL下發布你的程序。這也需要例如提供完整的應用程序源代碼。有關更多信息,請參閱GPL許可證文本。

我們根本不鏈接到Xvid,只是在運行時通過VfW接口調用 - 我們可以使用我們的專有軟件進行分發嗎?

不,不管你用哪種方式鏈接到Xvid或者你認爲是鏈接什麼,什麼不是。 GPL根本不關注術語「鏈接」,而是要求根據GPL的條款將整體/派生作品作爲一個整體進行發佈。基本上,任何兩個(或更多)部件組合在一起使用時組成一個組合工作。因此,如果您的程序在運行時調用Xvid功能,它將構成派生工作 - 無論您在技術上如何實現對Xvid的調用。如果您不想在GPL下發布您的程序,請不要將它與Xvid結合使用。

這對您意味着什麼,如果您的程序也獲得GPL許可,您只能在程序中分發XVID。但是,向用戶建議他們自己獲得XVID是完全正確的。

+0

謝謝大衛。我可以在安裝程序中爲用戶安裝嗎?還是因用戶權限等原因需要手動執行?另外,你的新頭像照片背後的故事是什麼?這是一個Android的東西? –

+0

我不確定分發XVID。我知道我們不這樣做,只是建議我們的用戶這樣做。這對我們來說從來都不是問題。我相信這是GPL授權。阿凡達?這是一個叫Oddie的混蛋。 –

+0

謝謝,感謝小費。 –