DVD 影片擷取
=> 可直接用 AcidRip 即可。
VCD 影片擷取
=> 目前是用 vcdxrip 指令 即可,在 vcdimager 套件中。
有時候, 光碟並非標準 vcd 格式,可以指定裝置,更容易成功。
指令為: vcdxrip -C /dev/cdrom
--
看到的資料 主要是以 mencoder 來擷取。
可參考下列網址:
1. mplayer 網站說明: (註一)
http://www.mplayerhq.hu/DOCS/HTML/zh/encoding.html
2. vcdimager 說明:
http://www.vcdimager.org/pub/vcdimager/manuals/0.7/vcdimager.html
---
使用 mencoder ,如下:
mencoder vcd://3 -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 -oac copy -o movie.avi
mencoder vcd://3 -ovc lavc -lavcopts vcodec=mpeg4:vpass=2 -oac copy -o movie.avi
但是覺得太麻煩,而且大小也差不多,應該還是直接取出 vcd 中的影片較適合。
後來找到 vcdimager 這套軟體,它包含許多套小軟體:
http://www.vcdimager.org/pub/vcdimager/manuals/0.7/vcdimager.html
-
vcdimager
Simple front-end, allowing for easy command-line controlled generation of basic VCD and SVCD disc images without an intermediate XML description.
-
vcd-info
Selectively shows detailed information about the structure a Video CD. See See (vcd-info)Top section `Introduction' in The GNU Video CD Info Dump Program.
-
vcdxgen
XML VCD-description generator, with a command-line interface similar to the classic vcdimager
front-end. See vcdxgen
.
-
vcdxbuild
Builds a VCD/SVCD according to a supplied XML description and files containing the MPEG program streams referred to in the XML description. See See section vcdxbuild
.
-
vcdxrip
Disassembles a given VCD or SVCD disc into a XML description and the contained MPEG program streams. See See section vcdxrip
.
-
vcdxminfo
This is a debugging tool for displaying some MPEG properties, as conceived by internal library libvcd
and libvcdinfo
. See See section vcdxminfo
.
-
cdxa2mpeg
-
A program to strip the RIFF header on CD-XA-format tracks. See See section cdxa2mpeg
.
若要 將 vcd 中的mpg 抓出來,只要在下
vcdxrip 指令,即會將 cdrom 中的影片 取出,放在目前的目錄下,建議建個空目錄執行,除了mpg 影片外,也會將其他 vcd 的資訊也取出來。
這是目前覺得取vcd最方便的方法,linux 下不能直接用 VCD 中的 dat檔,因為那是 專讓ms 那種不能直接讀 用的,linux 下是直接讀取的。可參考 mplayer 網頁上的說明- 關於.DAT 文件。(註二)
http://www.mplayerhq.hu/DOCS/HTML/zh/cd-dvd.html
註一:mplayer 網站說明:
http://www.mplayerhq.hu/DOCS/HTML/zh/encoding.html
7. 用MEncoder編碼MEncoder的全部可用選項和示例請看man page。一些實用的例子和對一些編碼參數的詳盡的解釋請看從mplayer-users郵件列表中蒐集來的編碼技巧。搜索郵件 文檔可以找到用MEncoder編碼的各方面以及所遇到問題的豐富的討論。
2-pass編碼:名稱來自這種方法實際把文件編碼兩次的事實。第一次編碼(又稱為pass)創建一些臨時性的幾兆的文件(*.log), 先不要刪除他們(你可以把AVI刪了)。在第二次編碼中,將使用臨時文件的比特率數據創建輸出文件,最後產生的文件將有好得多的圖像質量。如果這是你第一次聽到這個, 你應該在網上查閱一些可用的指南。
這個例子演示如何把DVD編碼成為2-pass的MPEG-4("DIVX")的AVI。只需要兩個命令:
rm frameno.avi
-- 刪掉這個文件,它可能來自以前的3-pass編碼(它會干擾當前編碼)
mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 -oac copy -o movie.avi
mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=2 -oac copy -o movie.avi
3-pass編碼:這是2-pass編碼的擴展,對音頻的編碼使用一個單獨的編碼。這種方法提供推薦視頻比特率的估計以使之能夠適合CD的容量。同時, 不同於2-pass方式,音頻僅僅被編碼一次。操作列表:
- 刪除衝突的臨時性的文件:
rm frameno.avi
- 第一次編碼:
mencoder -ovc frameno -oac mp3lame -lameopts vbr=3 -o frameno.avi
將創建一個只有音頻的avi文件,只包含要求的音頻流。不要忘記-lameopts
,如果需要的話設置它。如果你對一部長的電影進行編碼, MEncoder在這個pass結束之後,將對於650Mb,700Mb,和800Mb的目標大小打印推薦的比特率值。
- 第二次編碼:
mencoder -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vpass=1:vbitrate=
這是第一次視頻編碼。可以選擇指定在上一步結束時MEncoder打印的視頻比特率。
- 第三次pass:
mencoder -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vpass=2:vbitrate=
這是第二次視頻編碼。指定跟上一次編碼一樣的比特率除非你真的知道自己在幹什麼。在這次編碼中,用frameno.avi
中的音頻將被插入到目的文件中..這就全部搞定了!
3-pass編碼的例子:
rm frameno.avi
-- 移去這個文件,它可能來自以前的3-pass編碼(它會干擾當前編碼)
mencoder dvd://2 -ovc frameno -o frameno.avi -oac mp3lame -lameopts vbr=3
mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 -oac copy -o movie.avi
mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=2 -oac copy -o movie.avi
MEncoder可以生成MPEG(MPEG-PS)格式的輸出文件。它們可能只能用於libavcodec的mpeg1video編解碼器,因為一般播放器 - - 除了MPlayer -- 認為MPEG文件中包含的是MPEG1視頻流和MPEG1 layer 2(MP2)音頻流。
這個特性目前來說沒有什麼用處,而且可能還有很多bug,其重要性在於目前MEncoder無法編碼MPEG1 layer 2 (MP2)的音頻,而它正是別的播放 器認為MPEG文件中應該有的。
要改變MEncoder的輸出文件格式,可以使用-of mpeg
選項。
示例:
mencoder -of mpeg -ovc lavc -lavcopts vcodec=mpeg1video -oac copy media.avi -o output.mpg
把電影圖像的尺寸重新設置的需要經常出現。原因可能很多,例如減小輸出文件的大小,網絡帶寬等等,很多人甚至再把DVD或SVCD編碼為到DivX 的AVI的時候也重新縮放,這是錯誤的。在這麼做之前,請先閱讀保持屏幕高寬比部分。
縮放過程由'scale'視頻濾鏡處理:-vf scale=width:height
。其質量由-sws
選項控制。如果它沒有指定, MEncoder將使用0:快速二次線性縮放。
用法:
mencoder sample-svcd.mpg -lavcopts vcodec=mpeg4:more_options -vf scale=640:480 -sws 2 -o output.avi
MEncoder能用兩種方式處理輸入流:編碼或者複製他們。這部分是關於複製的。
- 視頻流(
-ovc copy
選項): 可以幹的很好:)
比如,把FLI或者VIVO或者MPEG1的視頻放(不是轉化)到AVI文件中。當然只有MPlayer能播放這樣的文件:)。而且可能在現實生活中沒有任何價值。 合理使用:比如視頻流複製可以用於只有音頻流需要被編碼的情況(比如,從非壓縮的PCM編碼為MP3)。 - 音頻流(
-oac copy
選項): 直接了當。可以把一個外部音頻文件(MP3,Vorbis)合波到輸出流中。 使用-audiofile
選擇來實現這個功能。
最容易的事情。我們簡單地複製視頻和音頻流,並用MEncoder產生索引。當然這不能修復視頻和/或者音頻流中可能的錯誤。 這同樣也可以修復交錯損壞的文件, 使它們不再需要-ni
選項。
命令:mencoder -idx input.avi -ovc copy -oac copy -o output.avi
作為副產品,修復損壞的AVI文件的功能使MEncoder可以用來修復兩個或多個AVI文件合併生成的文件:
命令:cat 1.avi 2.avi | mencoder -noidx -ovc copy -oac copy -o output.avi -
注意:這要求1.avi
和2.avi
使用同樣的編解碼器,分辨率,流速率 等等,並且至少1.avi不是損壞的。你可能需要先修復你的AVI輸入文件,按照上面所說的方法。
libavcodec提供簡單編碼許多有趣的視頻和音頻格式(目前其音頻編碼器還不支持)的方法。 你能編碼下列的編碼格式:
- mjpeg -- Motion JPEG
- h263 -- H263
- h263p -- H263 Plus
- mpeg4 -- DivX4
- msmpeg4 -- 老的DivX
- msmpeg4v2 -- Micro$oft MPEG4 V2 (DivX的又稱為MP43的前輩)
- rv10 -- 老的RealVideo編碼格式
- mpeg1video -- MPEG1視頻:)
第一欄是應該在vcodec
選項裡設置的編碼格式的名稱,比如:-lavcopts vcodec=msmpeg4
例如,對於使用MJPEG壓縮:
mencoder dvd://2 -o title2.avi -ovc lavc -lavcopts vcodec=mjpeg -oac copy
註二:
http://www.mplayerhq.hu/DOCS/HTML/zh/cd-dvd.html
DVD結構
DVD盤每個扇區有2048字節附帶ECC/CRC。它們經常在一個音軌上使用一個UDF文件結構,包含各種文件(小的.IFO和.BUK文件和大的 (1GB) .VOB文件)。它們是真正的文件,可以在一個mount了的未加密的DVD的文件系統上被覆制/播放。
.IFO文件包含電影的導航信息(chapter/title/angle map, 語言表等等)需要它來讀取和解釋.VOB文件的內容(電影)。.BUK文件是它們的備份。 它們到處使用扇區,所以你需要使用碟片上扇區的未經處理的地址類實現DVD導航菜單和內容解密。
整個的老式DVD支持使用libcss
所以需要一個mount了的DVD文件系統和直接的基於扇區的設備訪問。不幸的是(在Linux下)你必須 是root才能得到一個文件的扇區地址。你有以下幾種選擇:
- 成為root或者使用一個suid-root的mplayer二進製程序。
- 讓MPlayer調用suid-root的fibmap_mplayer外殼程序來訪問DVD(使用通過
libcss
的老式DVD播放方式)。 - 根本不使用內核的文件系統驅動而是在用戶空間重新實現它。
libdvdread
0.9.x和libmpdvdkit
就是這麼做的(新式DVD支持)。內核的UDF文件系統驅動是不需要的因為它們有自己內建的UDF文件系統驅動。同樣DVD不需要mount 因為只需要使用直接的基於扇區的訪問。
有時/dev/dvd
用戶不能讀取,所以libdvdread
的作者設計了一個模擬層把扇區地址變換為文件名 +偏移量,用來在一個mount了的文件系統甚至硬盤上模擬直接訪問。
libdvdread
甚至可以通過mountpoint而不是設備名,通過訪問/proc/mounts
查找設備名來進行直接訪問, 這是為Solaris設計的,那裡設備名是動態分配的。
默認的DVD設備是/dev/dvd
。如果你的設置不同,作一個符號鏈接,或者在命令行中用-dvd-device
選項 指定一個正確的設備。
DVD認證
新式DVD支持的認證和解密的方法是通過一個打了補丁的libdvdcss
(見上面)來完成的。可以通過指定環境 變量DVDCSS_METHOD
來設置解密方法,可以設置的值為key
, disk
或者title
。
如果什麼都沒有指定它將會嘗試下列方法(默認: key, title request):
- bus key: 這個密鑰在認證(一長串的ioctls和各種密鑰的交換,加密的東西的混合)的過程中確定,然後在通過沒有保護的 總線之前用它加密title和disk keys(防止竊聽)。需要bus key來獲得加密的disk key並對其進行預解密.
- cached key: MPlayer尋找已經破解的title keys,存放在
~/.mplayer/DVDKeys
目錄下(很快;). - key: 如果沒有可用的cached key,MPlayer嘗試使用播放器密鑰來對disk key進行解密。
- disk: 如果密鑰方法失敗(比如:沒有自帶的播放器密鑰),MPlayer將會使用一種暴力算法來破解disk key。 這個過程非常消耗CPU而且需要64 MB內存(16M的32Bit的整個hash表)來存儲臨時數據。這種方法總能起作用(很慢)。
- title request: 有了disk key以後MPlayer需要加密的title keys,它被用
ioctl()
儲存在隱藏扇區裡。 RPC-2驅動器的地區保護在這一步實現,所以在這樣的驅動器上可能會失敗。如果成功的話,將使用bus和disk key對title keys進行解密。 - title: 這個方法在title request方法失敗時使用,不依賴於與DVD驅動器的任何密鑰交換。它使用一種加密破解的方法 直接猜測title key(通過尋找已解密的VOB內容中的一種重複格式然後猜測加密部分的前幾個字節是這種格式的延續)。 這種方法也被成為"已知明文攻擊"或者"DeCSSPlus"。很少的情況下,因為碟片上沒有足夠的加密數據來進行統計攻擊或者因為密鑰交換 發生在一個title的中間,這種方法會失敗。這種方法是解密一個儲存在硬盤上的DVD或者在一個RPC2驅動器上讀取一個地區錯誤的DVD 的唯一方法(很慢)。
RPC-1 DVD驅動器只保護軟件設定的區域。RPC-2驅動器有一個硬件保護,只允許5個改變。如果你有一個RPC-2 DVD驅動器, 可能需要/推薦將固件升級到RPC-1。固件升級可以在這裡firmware page找到。 如果沒有可用於你的設備的固件升級,使用區域設定工具來設置你的 DVD驅動器的地區(在Linux下)。警告: 你只有5次設置地區的機會。
---
VCD結構
VCD碟片由一個或多個音軌組成:
- 第一個軌道是一個小的2048字節/扇區的數據軌,有一個iso9660文件系統,通常包含Windows VCD播放程序可能還有其他信息 (圖像,文字等等)。
- 第二和之後的軌道是未處理的2324字節/扇區的MPEG(電影)軌,每個扇區包含一個MPEG PS數據包而沒有文件系統。音頻CD的軌道也類似。 這些軌道是無法被mount的(你曾經mount一個音頻CD然後播放過嗎?)。大部分電影都在這個軌道,所以你應該先試試
vcd://2
。 - 有些VCD碟片沒有第一個軌道(單軌道而根本沒有文件系統)。它們也可以播放,但是不能mount。
關於.DAT文件:
在mount了的VCD的第一軌上看到的~600 MB的文件不是一個真正的文件!這是所謂的ISO通道,用來使Windows能夠處理這樣的 軌道(Windows根本不允許程序直接訪問未處理的設備)。在Linux下你不能複製或者播放這些文件(它們裡面是些垃圾)。在Windows下 這是可以的,因為它的iso9660驅動能模擬在這個文件中讀取未處理的音軌。要播放一個.DAT文件你需要Linux版的PowerDVD中的 內核驅動。它有一個經過修改的iso9660文件系統(vcdfs/isofs-2.4.X.o
)驅動,可以通過這個.DAT影子文件模擬 讀取未處理音軌。如果你用它們的驅動來mount,你可以複製甚至用mplayer直接播放.DAT文件。但如果用Linux內核的標準的 iso9660驅動是不會有用的!應該使用-vcd
選項。另一種複製VCD的方法是新的cdfs內核驅動(不是官方內核的一部分),它能夠把CD的sessions 顯示成鏡像文件,或者cdrdao,一個bit-by-bit的CD抓取/複製程序。