創建帶菜單的DVD

[size=3][color=green][b]怎麼在linux下創建帶菜單的DVD[/b][/color][/size]


[quote][size=3][color=blue][b]雖然現在在linux中有圖形化界面的工具來創造帶菜單的DVD,現在在命令行界面和一些工具的幫助下完成此事也成爲可能。

這份文檔是爲幫助那些準備做如下事情的人們:
1,完成將一個視頻文件(.avi, .mpg, .wmv, .mov, etc.)轉還爲可以在一個標準DVD播放器可以播放的DVD介質中。
2,創建專業風格的帶有音頻的菜單,允許選擇標題、段落和其他的菜單。

所需要的工具:
* 最新的mjpegtools 1.6.2
* 最新的transcode 0.6.12
* 最新的dvd+rw-tools 5.16.4.8.6
* Mencoder (包含在mplayer軟件包中),'USE="encode emerge mplayer'
* GIMP圖像處理程序
* Dvdauthor 0.6.9

注:
如果要升級的話,女孩需要做:
代碼:
# emerge gentookit
# ACCEPT_KEYWORDS="~x86" revdep-rebuild
來修正庫文件依賴性問題。

選用的工具:
* Xine - 在燒錄DVD之前測試一下DVD菜單,'emerge xine-ui'
* Normalize - 規範音頻.pcm/.wav文件的音量
* Toolame

爲方便讀起來更簡單,我將使用一些真的文件名,並且將他們和所有新創建的文件放置在同一個文件夾。
出於練習的目的,我選用了兩個視頻文件,是從[url]http://www.matrix-xp.com[/url] 下載的,我將文件名分別改爲‘matrix.mpg’和‘outtakes.mpg’。
我也將使用THX主題作爲DVD啓動的主題,命民爲‘thx.mpg’
如果你打算將這些應用於個人使用之外,請注意版權問題。

給電影編碼
知道或找出你將使用什麼TV格式。
對於歐洲和澳大利亞大部分地區來說,使用PAL。
對於美洲(或者其他?),使用NTSC。

對於PAL:
代碼:
# transcode -i matrix.mpg -V -y mpeg -F d -Z 352x288 --export_fps 25 --export_asr 2 -E 48000 -b 224 -o matrix
# transcode -i outtakes.mpg -V -y mpeg -F d -Z 352x288 --export_fps 25 --export_asr 2 -E 48000 -b 224 -o outtakes
# transcode -i thx.mpg -V -y mpeg -F d -Z 352x288 --export_fps 25 --export_asr 2 -E 48000 -b 224 -o thx

對於NTSC:
代碼:
# transcode -i matrix.mpg -V -y mpeg -F d -Z 352x240 --export_fps 29.97 --export_asr 2 -E 48000 -b 224 -o matrix
# transcode -i outtakes.mpg -V -y mpeg -F d -Z 352x240 --export_fps 29.97 --export_asr 2 -E 48000 -b 224 -o outtakes
# transcode -i thx.mpg -V -y mpeg -F d -Z 352x240 --export_fps 29.97 --export_asr 2 -E 48000 -b 224 -o thx

以上將會產生六個文件‘matrix.m2v/matrix.mpa’,‘outtakes.m2v/outtakes.mpa’,‘thx.m2v/thx.mpa’,這些文件已經從原始文件中分爲單獨的視頻和音頻文件。視頻(.m2v)已經編碼爲DVD兼容的格式,音頻(.mpa)已經重新採樣並編碼(從標準的44kHZ的採樣率轉爲DVD需要的48kHZ的採樣率)。

代碼:
# mplex -f 8 -o matrix_dvd.mpg matrix.m2v matrix.mpa
# mplex -f 8 -o outtakes_dvd.mpg outtakes.m2v outtakes.mpa
# mplex -f 8 -o thx_dvd.mpg thx.m2v thx.mpa

以上將會將新產生的音頻和視頻合併爲DVD視頻文件。
可以用mplayer或xine來檢驗這些文件。比如:'mplayer -vo xv matrix_dvd.mpg'

對於非標準的文件格式,如.wmv, .mov, .asf等等。必須用mencoder將電影編碼爲.avi格式,如同這樣:
對於PAL:
代碼:
# mencoder -o ouput_file.avi -ovc lavc -oac lavc -ofps 25 your_movie.mov

對於 NTSC:
代碼:
# mencoder -o ouput_file.avi -ovc lavc -oac lavc -ofps 29.97 your_movie.mov

然後可以像前面正常情況下使用transcode命令。
如果mencoder出錯,提示如下信息:
Quote:
Couldn't open codec mp2, br=224
那麼試着將下面其中的一行到你的mencoder語句中:
-channels 2
-srate 22050
-srate 32000
-srate 48000

注意:
* 如果音頻/視頻(AV)同步不準確,試着transcode的AV同步自動修正參數換爲'-D 0'如下:
代碼:
# transcode -i matrix.mpg -V -y mpeg -F d,1 --export_fps 25 -Z 352x288 --export_asr 2 -E 48000 -b 224 -D 0 -o matrix

* 如果transcode出錯或被拒絕,用mplayer輔助transcoe如這樣:
代碼:
# transcode -i matrix.mpg -V -x mplayer,mplayer -y mpeg -F d -Z 352x288 --export_fps 25 --export_asr 2 -E 48000 -b 224 -o matrix

* 記住,你可以在用trancode編碼時用mplayer或xine來預覽.m2v文件。沒必要等到編碼完成後在來看結果,這對比較大的電影方便。


創建菜單:
對於PAL:
打開Gimp程序,創建一個大小爲720x576,分辨率爲75dpix80dpi的新圖像。

對於NTSC:
創建一個大小爲720x480,分辨率爲81dpix72dpi的新圖像。

在圖像上鼠標右擊,選擇 Image -> Alpha -> Add chanel。
在圖像上鼠標右擊,選擇 Image -> Layers -> Layers, Channels & Paths
創建層‘button_highlight’。
創建層‘button_select’。
選擇背景層,畫出菜單的背景圖像。

我選用 matrix 'green data dribble' 作爲背景,這是我從一個免費牆紙網站中下載下來的。
調整圖像的大小到準確的 720x576,鼠標點擊圖像選擇 Image -> Scale Image & set。 然後複製/粘貼到我新建圖像文件的背景中。
這裏有這個圖像文件:

我希望對於不同的電影,菜單中有可選擇的快照。
快照可由xine截取得,圖像大小再由gimp修改,然後粘貼到背景層中。
這裏有這個圖像文件:

選擇button_highlight層,勾劃出按鈕形狀。要看如果在gimp中畫出完美的長方形、正方形和圓形,可以參卡這裏:[url]http://www.cubicdesign.com/gimp/1_3/[/url]
這裏有這個圖像文件:

隱藏button_highlight層,並保存背景層。
做這個我們可以如下做:選擇button_highlight層,並在這些層、頻道和路徑(Layers, Channels & Paths)中應用不透明滑動塊(Opacity slider),使他不可見。
點擊背景層,右擊圖像,選擇 File -> Save as
保存背景層爲matrix_menu_background.jp。
(注:背景必須爲jpg格式)

同樣的方法選擇button_highlight層。使用不透明滑動塊(Opacity slider)使button_highlight層恢復,隱藏背景層。
點擊button_highlight層,右擊圖像,選擇 File -> Save as
保存button_highlight曾爲matrix_menu_highlight.png。
(注:按鈕層必須爲png格式)

選擇button_select層,並勾劃出和button_highlight一樣的按鈕,但顏色不一樣。一個簡單的方法是打開matrix_menu_highlight.png,右鍵點擊圖像,選擇 Image -> Colors -> Color map rotation,選擇一個不同的顏色,但是在菜單背景中可以顯現的顏色。
將這個新的圖像保存爲matrix_menu_select.png。
(注意:必須爲png格式)

將這些合併在一起
將菜單背景轉換爲DVDmpg格式
對於PAL:
代碼:
# jpeg2yuv -n 50 -I p -f 25 -j matrix_menu_background.jpg | mpeg2enc -n p -f 8 -o matrix_menu_background.m2v

對於NTSC:
代碼:
# jpeg2yuv -n 50 -I p -f 29.97 -j matrix_menu_background.jpg | mpeg2enc -n n -f 8 -o matrix_menu_background.m2v

給菜單創建一些背景音樂
代碼:
# mplayer yourmusicfile.mp3 -vo null -ao pcm -aofile menu_audio.pcm

根據需要用normalize是音量柔和點或大聲點
代碼:
# normalize -a -10dB menu_audio.pcm

轉還爲mpge音頻:
代碼:
# mp2enc -r 48000 -o menu_audio.mpa < menu_audio.pcm

如果你不需要在你的菜單中添加音樂,仍然需要創建一個靜音的音頻文件和DVD菜單組合,這樣菜單工作才能正常。如下:
對於PAL:
代碼:
# dd if=/dev/zero bs=4 count=1920 | toolame -b 128 -s 48 /dev/stdin menu_audio.mpa

對於NTSC:
代碼:
# dd if=/dev/zero bs=4 count=1601.6 | toolame -b 128 -s 48 /dev/stdin menu_audio.mpa

組合菜單背景視頻和音頻:
代碼:
# mplex -f 8 -o matrix_menu.mpg matrix_menu_background.m2v menu_audio.mpa

用spumux來將button_highlight和button_select圖像融入菜單視頻中。
Spumux是dvdauthor軟件包的一部分。他通過一個xml文件配置。這裏有我們要用到的一個xml配置文件,保存爲spumux.xml:
代碼:
<subpictures>
<stream>
<spu start="00:00:00.0" end="00:00:00.0"
highlight="matrix_menu_highlight.png"
select="matrix_menu_select.png"
autooutline="infer"
autoorder="rows"/>
</stream>
</subpictures>

創建最後的menu視頻
代碼:
# spumux spumux.xml < matrix_menu.mpg > matrix_menu_final.mpg

創建DVD
Dvdauthor通過一個xml文件配置。這裏有一個我們要用到的xml配置文件,保存爲dvdauthor.xml:
代碼:

<dvdauthor dest="DVD">

<vmgm>
<menus>
<pgc>
<vob file="thx_dvd.mpg"/>
<post>
jump titleset 1 menu;
</post>
</pgc>
</menus>
</vmgm>

<titleset>
<menus>
<pgc>
<button> jump title 1; </button>
<button> jump title 2; </button>
<vob file="matrix_menu_final.mpg" pause="inf"/>
</pgc>
</menus>

<titles>
<pgc>
<vob file="matrix_dvd.mpg"/>
<post>
call menu;
</post>
</pgc>
</titles>

<titles>
<pgc>
<vob file="outtakes_dvd.mpg" />
<post>
call menu;
</post>
</pgc>
</titles>

</titleset>

</dvdauthor>


創建一個文件夾名爲DVD。
創建DVD文件價格用如下命令:
代碼:
# dvdauthor -x dvdauthor.xml

在刻錄之前用xine測試一下新的菜單:
代碼:
# xine dvd:/full/path/to/DVD/VIDEO_TS/

xine應該播放這個文件夾就和播放一個DVD一樣。


理解DVD的分層結構
VMGM:也稱作主菜單,處於DVD視頻結構的最好級別。
標題集(Titleset):每個DVD至少包含一個標題集。所有的一個給定的標題集相聯繫的文件都以VTS_nn的形式出現(nn是標題集的標號,標號從1開始)。
標題:每個標題集包含一個或多個標題。每個標題事實上相當於一個獨立的電影。如果你啓動xine,並且只是告訴他去打開一個DVD,如果這個DVD沒有一個更高級別的菜單,程序將會只播放第一個標題集的第一個標題就停止了。
段落:每個標題都再細分爲幾個段落。段落提供指向電影的記錄,但是當播放器播到一個段落的最後,播放器將會繼續播放下一個段落。

菜單可以和整個聯繫起來(此時稱爲視頻管理菜單VMGM),也可和一個標題集聯繫起來(此時稱爲視頻標題集菜單VTSM)。每種類型都可以有多於一個的菜單。
當在不同標題集時不止一個的VTSM需要是,典型情況下將會是用VMGM菜單,因爲在不同標題集時一個VTSM不會自動跳到另一個VTSM。

導航菜單對象的限制如下:
一個VMGM菜單隻能跳到:
* 另一個VMGM菜單
* 一個標題集的第一個VTSM
* 一個標題集的開始

一個VTSM菜單隻能跳到:
* 同一個標題集的另一個VTSM
* 標題集中的一個標題或段落
* 磁盤的第一個VMGM

注:我得DVD播放器(或者其他的?)在遙控器恩'Disc'鍵時默認到第一個VTSM。如果是這種情況,而你又需要設置菜單可以在VMGM級別上訪問另一個不同的VTSMs,你需要設置第一個VTSM如下:
代碼:
<titleset>
<menus>
<pgc>
<post>
jump vmgm menu;
</post>
</pgc>
</menus>
<titles>....
這樣摁'Disc'鍵可以讓你進入VMGM菜單。

創建DVD鏡像文件並刻錄。
使用growisofs工具,這事dvd+rw-tools軟件包的一部分。
代碼:
# growisofs -Z /dev/dvd -dvd-video DVD/


最後的注意事項:
但願你能成功使DVD工作起來
當然,更復雜的菜單可以通過增加段落到你得電影和創建嵌入式菜單(菜單一層套一層)。而這只是一個初學者的使用嚮導,只用到兩個標題。
雖然咋看起來這有點複雜和浪費時間,但是一旦你做過幾次,將會變得越來越迅速和簡單。
在命令行下而不是圖形化界面下編碼也意爲着非常快速。(大概三倍速度於在我弱弱的XP1800+下的Windows操作系統)
一些工作在圖形化界面完成確實不錯,但是需要太多的工具來完成這個。我認爲這將需要一個開發隊伍大量的工作。


感謝:
Scott T. Smith - 優秀的工具dvdauthor的作者
Thomas Oestrich - transcode的作者
The mjpeg team
Wolfgang Wershofen - 感謝他準確和仔細的幫助
Ian Pointer - 感謝他在linuxjournal.com的文章Issue# 116
James A. Pattie - 感謝他的關於'DVDs under Linux'講演
James Tappin - 感謝他的寫的dvdauthor使用說明

鏈接:
* Wolfgang Wershofen 已經做了一些有趣的工作,完成了一些不同的xml配置文件和一個自動完成整個菜單創建的腳本。這些東西可以在這裏找到:
[url]http://www.wershofen.de/donwloads/dvdauthor.xml[/url]
[url]http://www.wershofen.de/downloads/dvdauthor_example.tar.gz[/url]
[url]http://www.wershofen.de/downloads/dvdwizard.tar.gz[/url]
* [url]http://www.linuxjournal.com[/url] - 一個有關在linux下創建DVD的有意思的文章。
* [url]http://www.pcxperience.org/james/dvd/presentations/[/url] - James Pattie's DVD講座
* [url]http://www.tappin.me.uk/Linux/dvd.html[/url] - James Tappin的dvdauthor使用手冊(現在已經更新,向那些想將DVB轉換爲DVD的人強烈推薦)[/b][/color][/size][/quote] 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章