2008-12-16

osTube--RMVB與RM的支援

講真的…osTube真不錯玩,上手時間也很快。
但唯一的重點就是…在codec的支援,除了它本身預設的codec compile就麻煩之外,還要讓它支援多種的格式的轉換也是很困難。

昨天在安置好我的FoxTube之後,想要嘗試上傳檔案來看看效果。試了mpeg、avi都不錯,只是…轉換速度有點慢,後台管理是選擇「標準轉換」…所以,以一個約7MB、78秒、740Kpbs/rate、視訊為divx-mpeg4、音訊為mpeg-layer3的avi檔,吃了我P4 3.2G+1G-ram(512*2)的loading 100%近30秒。

有點慢。
但如果選「快速轉換」,同一個檔案約15秒,少了一半,但畫質也掉一半。唉…算得不嘗失。
「標準轉換」的23MB的avi,要花三分鐘…
============
以上離題了…
主題是:『如何讓osTube可以支援rmvb/rm to flv呢』…
注意,是有加上「to flv」,也就是讓osTube支援rmvb/rm轉換成flv

osTube安置好後,基本上可以支援的檔案格式就不少了…預設支援的有「avi wmv mov mpg mpe mpeg 3gp flv mp4 m4v」…差不多有八成的通用格式了…但重點是,現在網路上比較方便找到的是Real格式的rmvb與rm…osTube預設支援的並沒有這種格式,怎麼會這樣咧~~~
別忘了,osTube是國外產品,rmvb/rm差不多是亞洲國家比較常在用,而且,現在電腦上有支援rmvb to 其他格式的軟體也不少,你自己先轉成可支援的格式就好啦。


當然,人是懶的…哈

主題的方向分二個
  1. 讓osTube先支援rmvb/rm檔的上傳
  2. 讓MPlayer & mencoder支援rmvb/rm的轉檔

這二個都不難…(當我造訪一堆國外技術文章後才發現,真的不太難)
關於1:
基本上,你只要進入osTube的後台,在media(媒體)的configuration(組態設定)中,找到video format(影片格式),加上rmvb與rm就行了(要用空白隔開)

關於2:
基本上這一個才是重點,重點在,前一篇中有講到在安裝MPlayer時要佈置它能運用的codec,所以,基本上,2的做法就是要讓MPlayer能支援rmvb/rm轉flv。

////
要做2,首要條件就是codec的種類,上MPlayer的網站下載LInux x86/ppc、windows的codec,解壓縮後通通放在同一個資料夾中,這裡的就跟前一則的codec佈署是一模一樣,然後執行./configure --prefix={要安裝mplayer的路徑} --codecsdir={上面的codec路徑},來先check real與libmp3lame…

接著,就make && make install
////
(上面的區塊和前一則佈署codec的做法是一模一樣,事實上,就當做重新安裝mplayer就對了…)

到了這邊,重要的2點已完成八成。
你可以先試著去上傳一個rmvb的檔來試試。

(我傳了個監獄兔的rmvb約6MB,轉檔要30秒…唉…)

ok,如果轉檔成功,就可以試播看看。
如果播出的很成功,沒有影音不同步的問題的話,那就很恭喜,你為我幸運。
事實上,因為rmvb的格式特殊,以osTube內建的指令可以很正常的轉換,但,這一個監獄兔傳上去之後,我發現,影音不同步,影像快聲音約六~十秒。這很糟糕。

所以,繼續之前的翻找爬國外文章…
這一次麻煩,效果不張,因為大部份的這一類型都不建議使用rmvb轉換。

個人持著懶惰的精神,總之我的伺服器就是要為我服務。
開始自行上mplayer的網站找document來看…看來看去,果然還是得從convert中下手。所以就得翻找mencoder的指令…
這一次經mplayer的document文件中得知,事實上mplayer支援蠻廣的,只是,需要codec與mencoder的配合,因為源碼開放的關係,在指令的操作上網路可以找到一堆。

從一堆的看似很重點的文件中,經過一堆繁雜的測試,正當覺得「算了,我還是改成大家都用的方式,先把rmvb轉avi,再轉flv好了」的想法正產生的同時。
腦袋中突然想到,以前不知道有聽死屁喬還誰說過,影像畫格(fps)與影音delay/ready有關。所以,就回想前面的測試…

前面從網路上找到的文,基本上,只是單純的對video與audio下手,只是純修改出與入的來源訊與輸出訊格式,的確沒想過fps的問題。

所以,打開在ouTube安裝的根目錄下,有一個「convert.php」的網頁,這個網頁是呼叫server下console指令的方式來做媒體轉換。大約在181行的「if($media->media_extention == 'wmv')」這邊開始,就是下轉換指令的地方…

當然,像ouTube這種要讓人容易上手的環境,在某一些需要技巧、技術的地方,它自然會有自己的預設值…在非wmv格式的影像媒體的轉換是使用
/usr/bin/mencoder input-source -o output-dest -ofps 25 -oac mp3lame -of lavf -srate 22050 -ovc lavc -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames -lavcopts vcodec=flv:keyint=50:vbitrate=600:mbd=2:mv0:trell:v4mv:cbp:last_pred=3 -vf scale=480:347

首先先看到那淡淡的粉紅色,為啥我會用那麼不清楚的顏色咧…
因為,在已知的某一些影音格式的下,這粉紅色的不會用到,但,你不能讓它還存在你要轉檔的指令中,所以在convert.php的語法中有一行是這樣寫的「if (!$mplayer_rc1) {
$conversionString = str_replace("-lavfopts i_certify_that_my_video_stream_does_not_use_b_frames ", "", $conversionString);
}」
這是osTube2.2中存在的東西,我只是拿出來講一下,因為有一些網站會教說把這個給remark掉,但事實上我在轉的時候都會出現convert error,看了一下log,主要原因就是在這個

接著,回到剛剛的fps上,前面的指令中有一個我用藍色字的,那個東西就是fps(frame per second),正常來說,25~30是人類的適應範圍。在osTube預設支援的格式中,這個fps 25不用改沒關係,因為不會影響。

但經我反覆測試之後發現,rmvb不適這個規定,若使rmvb也使用預設的fps 25的話,就會出現聲音慢影像六~十秒的問題。最後測試的結果,發現,fps使用30,結果還不錯…影音基本上可以同步,不過大約有誤差值是0.4秒左右。但,30不錯了…

那要怎麼改咧?
聰明的人一定會直接就想說改預設值呀,把25改30就好啦…事實上沒錯,這一點聰明如我的也想到了…但是,在此聽一個浪費蠻多時間的我一句話,還是寫一個例外判斷在convert.php中好了,因為我找了一堆檔,就是沒看到這預設值是寫在哪…(或者在config中吧)…

總之,我放棄…反正就學那wmv的寫就好了…只要把-ofps 25改-ofps 30就行了…

ok…完成了…
這是完成版的監獄兔第一集
(裡面還放有花了我約四十分鐘轉檔的測試用七龍珠2008ova…因為測試,為了智慧財產權,二天後移除)

2 則留言:

愛*薇兒 提到...

你的布變好亮....刺啊~~
監獄兔我還沒看過半集 人家說很好看
我只看過夾娃娃機中仿的刀疤亂畫的假兔子
你那應該有全套吧?
回花蓮再跟你扣

wbuffe 提到...

那個 一定不是我說的-口-

foxtube是上班的時候玩的呀?!