『漫游』酷论坛>『影音数码技术学习交流』>[原创][聊天]窮人 分散 ..

[原创][聊天]窮人 分散式超級壓片電腦之實現

weilai@2004-06-09 16:16

=====6/19=====
這裡最近看了一個個案
用同一個 HPP 模版,但最後卻不能合併前半段及後半段
所以 建議大家用 avs 的方式導入
並且由於 rmvb 的 DirectShowSource 導入音訊與視訊會時而產生不同步
所以請將 音訊與視訊 分開導入,最後再用 AudioDub 結合
如此就不會有不同步的問題了

=====6/09=====
相信很多人常抱怨自己壓製影音檔很費時,而只要 PC玩有一段時間的網友
就很可能有兩台以上的 PC主機,因此 "分散式超級壓片電腦" 就得以實現
此理論經實驗證明確實可行請看以下的方案說明:

必備條件:
.兩台 PC 一台是你現在在用的,一台是舊PC(只要有一個HDD、CPU、基本RAM、顯示卡)當然也可為新的
.PC to PC 資料傳送方式 (比如USB傳輸線/HDD、區域網路、網際網路、可攜式硬碟...)


所需軟體:
AVI: VirtualDubMod、相對應編解碼器
RM/RMVB: RealProducer Plus/Batch Real Producer/ERP/...、RealMedia Editor
Avisynth


方法:
AVI:
.先用 VirtualDubMod 打開要重新壓製的片源(開啟時如會跳出一個視窗答 "否")
.壓著 Shift 鍵用滑鼠移動 卷軸 seeking keyframes 找到大概中間位址(如有三台作業PC就移到大概 1/3處)
.接著按微调;Frame鍵(也就是 >>鍵)找 "完全不同的下一個分鏡"(這是重點,因為這裡攸關連結後的順暢與否)回車(<< )確定之,並記下 VDM下方的 Frame xx 之 xx數值
.接著將 "音訊" 介由 demux 提出 (streams -> stream list -> demux)存檔
.寫兩個 Avisynth 腳本用到 VClip=AVISource(片源,false)、trim(0,xx)及 trim(xx+1, VClip.Framecount) 語法
P.S. AVISource不行開就改用DirectShowSource
.接著兩台 PC 各一個 Avisynth 腳本,開啟 xx.avs 開始壓製(當然每台都要有一個 片源,壓製參數也要一樣)
.接著不論是哪台傳給哪台用 VDM 的 File -> Append Segment 結合兩分段影片
.最後介由 streams -> stream list -> ADD 之前 音訊 並選 Vedio -> Direct stream copy,再Save as AVI 存檔
.完成
RM/RMVB:
方法同 AVI 差別在於不做 "影音分離作業" 及
使用 RealMedia Editor 做影片連結

後述:
有人會說 dual CPU 的 PC 會不會比較快,或同以上方法之效能,由於沒有裝備無法 100%回答,
但以個人對 PC硬體的了解要比快的話,應該是 "分散式超級電腦" 快。

那最重要的花費時間呢?可想而知離想的狀態是一台PC的 1/2,
但由於其他前置作業與後置作業時間、Avisynth時間加權、PC差異等因素,所以是不可能達到的

自己做的結果有一個簡單算式(假設兩台 PC 壓製效能等級相同)

總時間 = {一台PC壓制時間/2 x Avisynth加權值(大概1.07%) + 音訊壓製時間(可有可無) + 作業時間}

P.S.
.作業時間 = 設定壓縮值時間 + 視訊、音訊合成時間 + 視訊連結時間 = 25分鐘動畫大概花費1~5分鐘
(這個時間很難說,其實都是很快的全看您的操作熟練度及硬體,像25分鐘動畫音訊Demux自己只花了12秒)
.Avisynth加權值的產生是因為Avisynth Frame server會增加 CPU Usage,個人實驗結果大概增加了 7% 的時間,
但在 HPP 的壓製上居然,.avs輸入比.avi輸入之壓製時間還少,所以很難說


個人實驗數據:
.25秒的 AVI 片源

.AVI重新壓製:
AVS輸入(用於 2 PC): XVID 1.0.1(預設值) Encodec,1.avi花了22秒,2.avi花了17秒 = 22秒
AVI輸入(用於 1 PC): XVID 1.0.1(預設值) Encodec,all.avi花了38秒 = 38秒 (照公式 2 PC 應該花了 20.33秒)

.RM/RMVB重新壓製:
AVS輸入(用於 2 PC): XVID 1.0.1(預設值) Encodec,1.rmvb花了36秒,2.rmvb花了28秒 = 36秒
AVI輸入(用於 1 PC): XVID 1.0.1(預設值) Encodec,all.rmvb花了70秒 = 70秒 (照公式 2 PC 應該花了 37.45秒)

因為 "作業時間" 大於 1 PC壓製時間,所以這裡不做效能比較,大家純參考以上數值就好了
引用

superview@2004-06-11 00:48

要是有强人做个外挂把它自动实现就好了
引用

gszenki@2004-06-11 22:40

问题在于这样子人做的工做可能会很大……

还是好象setiathome那种就好……
引用

weilai@2004-06-12 10:59

引用
最初由 superview 发布
要是有强人做个外挂把它自动实现就好了


這個辦的到的
只是寫這個會累死人(光查資料從無到有...)

概念就是

.Windows DDE 動態資料交換 -->(探查窗口)[software:伺服端]-->(啟動壓製程式)--> OK -->回傳
. PC <-- [software:主控端]--> (啟動壓製程式) --> OK
. 發放資料皆回傳後 -->[software:主控端]--> 連結 --> OK
引用

可曾记得爱@2004-06-12 16:17

要能像MAYA的网络渲染一样,能同时利用局域网里的N台电脑一起压,一台做服务器~就完美了
引用

小鬼@2004-06-14 19:19

怎么强的办法楼主也有本事啊?
厉害!不顶不行啊!
引用

weilai@2004-06-19 10:52

補充了一點 (6/19)
是對某 "rmvb影片合并问题" 有感而發
也是經過試驗證實的

其實還有個個案
很類似
"rmvb影片用 DirectShowSource 導入音訊與視訊會時而產生不同步" 之問題
自己目前也是用此方法
外加 fps 的多方嘗試

P.S. 由於我這裡可行,但別人不可行,(對方)卻實問題癥結不解,所以也不做陸續的解答,也就是這裡不做其他問題解答 ^^
引用

Alpha.Roc@2004-06-19 20:17

这个方法真是有创意啊,虽然暂时还用不上,但还是谢谢楼主的奇妙构想呢。
引用

| TOP