Linux ムービー・動画環境

DVD ビデオ作成

2004年1月2日: MJPEG Tools でのエンコード方法追加
2003年7月13日

昨年末から今年にかけて家庭用 DVD レコーダのラインナップが増え、一気に普 及していきそうです。また PC 用の書き換え用DVD (±R/RW, RAM) の値段も 一気に下がり搭載 PCも増えています。PCだとオリジナル DVD 作成の際に凝った 編集が出来、最近雑誌等で特集が組まれることも増えています。ただ、そういっ た記事は当然のごとく Windows での作業です。そこで、いろいろ調べたところ、 Linux でも DVD ビデオが作成できることが分かったので早速 DVD-R/RW ドライ ブを購入し試してみました。DVD メニューもチャプター分けもできます。(メニュー 作成の解説はこちらこちら (新バージョン))

購入した DVD-R/RW ドライブはメルコ DVR-R42FB です (東芝製の SD-R5112 の OEM)。今の話題は DVD マルチドライブや ±R/RW ドライブですが、マルチドライブはまだ -R の速度が 2 倍だし、+ も - も両方 使うわけもないと思って値段も 2万円を切るこのドライブにしました。RAM の読み込みも可能と言う ことで (OS さえ対応していれば) 全てのタイプのメディアの読み込みは出来る わけです(多分)。ちなみに Linux で動作するかどうか調査する前に買いましたが結 果として動きました(笑)。

以下の手順で行います。

1. DVD-R/RW ドライブの認識
2. dvdauthor、dvdrtools 他、ソフトインストール
3. ビデオの DV カメラからの取り込み
4. DV カメラ映像の DVD 用 MPEG2 エンコーディング
5. オーサリング
6. DVD イメージ作成、確認、書き込み

1. DVD-R/RW ドライブの認識

CD-R/RW ドライブでもそうですが、ATAPI の DVD-R/RW を Linux で使うときは IDE の SCSI エミュレーションを使います。カーネルで設定し、再構築しましょ う。

ATA/IDE/MFM/RLL support  --->
IDE, ATA and ATAPI Block devices  --->
<*>   SCSI emulation support
再構築したら lilo の設定などをして PC を立ち上げ直します。
正常に認識されれば、ドライブは /dev/scd0 として認識されています。IDE ポー トの上位に他の CD/DVD ドライブが接続されている場合は、/dev/scd1 等になっ ている場合もあります。

2. dvdauthor、dvdrtools 他、ソフトインストール

次に必要なソフトのインストールをします。 使用するソフトは以下です。

dvgrab: DV カメラからビデオ映 像を IEEE1394 経由でキャプチャするソフト。詳しくは IEEE1394 カードでデジタルビデオ取り込み参照。
MJPEG Tools: MPEG2 ファイルを 作る際に使用。DVD ビデオ作成には 1.6.x が必要。どのマイナーバージョンから可能になったかチェックしてないが最新版を使うといい。詳しくは MPEG ビデオファイルの 作り方参照。
transcode: MPEG2 ファイルを作る際に使用。詳しくは transcode で DivX 作 成 参照。
libdvdread: DVD を読み込むのに必要なライブラリだが、次の dvdauthor もこれを使ってい る。
dvdauthor: 作成した MPEG2 映像から DVD ビデオに必要なファイル (IFO, VOB, BUP ファイル) とディ レクトリ構造を作るソフト。
dvdrtools: DVD ビデオ書き 込み用イメージファイルを作成する mkisofs、それを書き込み型 DVD ドライブ に書き込む dvdrecord 含む、書き込み型 DVD ドライブの総合ツール。上の dvdauthor の機能も取り込まれている。

ここではこれらのうち、libdvdread、dvdauthor、dvdrtools のインストール方 法を解説します。

[libdvdread]

libdvdread は DVD を読むためのライブラリですが、dvdauthor でも使っている ようです。rpmfind.net の検索結果から libdvdread-0.9.4-fr3.src.rpm を取ってきます。ただし、 これをこのまま rpm --rebuild してもうまく行かなかったので、 SRPM をインストールしてから SPEC ファイルを編集します。

$ rpm -ivh libdvdread-0.9.4-fr3.src.rpm
$ cd ~/rpm/SPECS/
このディレクトリにある libdvdread.spec を以下の様に編集します。

%{_libdir}/*.a
%exclude %{_libdir}/*.la
%{_libdir}/*.so

%{_libdir}/*
に置き換えちゃいます。そして、
$ rpm -ba libdvdread.spec
とコンパイルします。 すると ~/rpm/RPMS/i386 に以下のファイルができます。

libdvdread-0.9.4-fr3.i386.rpm
libdvdread-devel-0.9.4-fr3.i386.rpm
これらをインストールします。

$ sudo rpm -ivh libdvdread-0.9.4-fr3.i386.rpm
$ sudo rpm -ivh libdvdread-devel-0.9.4-fr3.i386.rpm

[dvdauthor]

次にオーサリングソフト dvdauthor をインストールします。サイトから dvdauthor-0.5.3.tar.gz を取ってきて、

$ rpm -ta dvdauthor-0.5.3.tar.gz
とするだけで、~/rpm/RPMS/i386/ に dvdauthor-0.5.3-1.7.2.i386.rpm が作成 されます。インストールしましょう。

$ cd ~/rpm/RPMS/i386/
$ sudo rpm -ivh dvdauthor-0.5.3-1.7.2.i386.rpm

[dvdrtools]

CD-R/RW 書き込み用ツールには有名な cdrecord がありますが、これは DVD 対応の時点からか cdrecord-ProDVD となり、ソース は有償、バイナリは非商用のみ無償となってしまいました。cdrecord の分家とし て dvdrecord を含む dvdrtools はソースも公開されて書き込み型 DVD の総合 的なツールとして良さそうなのででここではこれを使います。(ただし対応ドラ イブがまだ少ないとのこと)
サイトから dvdrtools-0.1.5-1ark.src.rpm をダウン ロードしてコンパイルします。ただし、このまま rpm --rebuild しても Vine ではうまく行かないので SRPM をインストールしてから SPEC ファイルを編集し ます。

$ rpm -ivh dvdrtools-0.1.5-1ark.src.rpm 
$ cd ~/rpm/SPECS/
このディレクトリにある dvdrtools.spec を以下の様に編集します。

%configure

という行を

./configure --prefix=/usr --exec-prefix=/usr \
  --bindir=/usr/bin --sbindir=/usr/sbin \
  --sysconfdir=/etc --datadir=/usr/share \
  --includedir=/usr/include --libdir=/usr/lib \
  --libexecdir=/usr/libexec --localstatedir=/var/lib \
  --sharedstatedir=/usr/share --mandir=/usr/share/man \
  --infodir=/usr/info
に置き換えます。そして、

$ rpm -ba dvdrtools.spec
とコンパイルします。 すると ~/rpm/RPMS/i386 に以下のファイルができます。

cdda2wav-0.1.5-1ark.i386.rpm
dvdrtools-video-0.1.5-1ark.i386.rpm
mkisofs-0.1.5-1ark.i386.rpm
dvdrecord-0.1.5-1ark.i386.rpm
競合する cdrecord をアンインストールしてからインストールしましょう。

$ sudo rpm -e cdrecord 
$ sudo rpm -ivh cdda2wav-0.1.5-1ark.i386.rpm 
$ sudo rpm -ivh dvdrtools-video-0.1.5-1ark.i386.rpm
$ sudo rpm -ivh mkisofs-0.1.5-1ark.i386.rpm
$ sudo rpm -ivh dvdrecord-0.1.5-1ark.i386.rpm
このままだと dvdrecord コマンドを実行したときにアクセス不可になってしま うので、

$ sudo chmod u+s /usr/bin/dvdrecord

として実行時の root の ID を設定します。

3. ビデオの DV カメラからの取り込み

ここでは映像ソースは DV カメラから取り込むことにします。デバイスドライバ、 ソフトのインストールなどの詳細は Linux で DV を参照してください。まず、取り込み映像用ディレクトリを作成してか ら dvgrab で映像を取り込みます。

$ mkdir dv
$ dvgrab --autoplit --size 1024 --format dv2 dv/video
--autosplit は一定取り込み画像が一定サイズに達したら分割する指定です。 --size ではそのサイズを MB で指定します。--format は DV 取り込み AVI の フォーマットを指定します。あとで transcode で変換するには dv2 を指定して おきます。最後にベースとなるファイル名を指定します。最初は dv/video001.avi から始まって、dv/video002.avi、dv/video003.avi …と --size で指定したファイルサイズごとに分割して取り込まれます。

4. DV カメラ映像の DVD 用 MPEG2 エンコーディング

取り込んだ画像は transcode, MJPEG Tools で変換します。transcode のインストール方法は transcode で DivX 作 成 を参照してください。

[transcode を使う方法]

$ transcode -x dv -i dv/ -y mpeg -F d -b 224 -o video
-x dv で映像ソースが DV であることを指定します。-i dv/ は映像ソースファ イルまたはソースの入ったディレクトリを指定します。dvgrab で取り込んだファ イルが番号順に読み込まれます。-y mpeg で MPEG-1/2 エンコード指定します。 transcode で MPEG-1/2 エンコードするには複数の方法が -y オプションで指定 できますが、ここでは bbMPEG の Linux への移植を使った mpeg を指定します。-F はコーデックごとに違うエンコードプロ ファイルを指定します。エンコードプロファイルはエンコードの各パラメータ (フレームレート、ビットレート、アスペクト比等) をまとめたものでここでは mpeg オプションの DVD 用プロファイルである、-F d を指定します。 -b 224 はオーディオのビットレートを指定します。-o でファイル名のベースを 指定します。-F d を指定すると -w オプションの指定値に関わらず映像のビッ トレートが自動的に最大値の 9800 kbps になってしまいます。それより小さい ビットレートを指定したい場合は、dvd.prof と言うファイル (ファイル名は任 意) を用意して、
max_bitrate=4000000.0
という内容にします。そして -F d,,dvd.prof と指定します。ここがちょっとめ んどくさいですね。

エンコードが終わると、video.m2v (ビデオストリーム) と video.mpa (オーディ オストリーム) が出来るので、以下のようにして合体させます。transcode に入っ ているツールの tcmplex を使い、

$ tcmplex -o video.mpg -i video.m2v -p video.mpa -m d
とします。-o はアウトプットファイル名 -i はビデオストリームのファイル名、-p はオー ディオストリームのファイル名、-m は DVD 用プロファイルです。

[MJPEG Tools を使う方法]

MJPEG Tools では以下のようにします。

$ lav2yuv dv/* | mpeg2enc -F 4 -n n -a 2 -b 9200 -f 8 -o video.m2v
$ lav2wav dv/* | mp2enc -b 224 -o video.mpa -r 48000
lav2yuv は AVI を YUV 形式で標準出力に出力します。それをエンコーダの mpeg2enc に渡してエンコードします。mpeg2enc のオプションは以下のものを使っています (詳しくは man mpeg2enc で)。

-F: フレームレート。4 は 29.97。
-n: ビデオの形式。n は NTSC。
-a: アスペクト比。2 は 4:3。
-b: ビットレート
-f: MPEG の形式。8 は DVD (dvdauthor 用だそうです)。
-o: 出力ファイル名。
その他、画質を向上させるためのオプションがいくつかあります。また、間に yuvdenoise と言うのを噛ませても画質を向上させることもできます。
lav2wav は AVI を WAV 形式で標準出力に出力します。それをエンコーダの mp2enc に渡してエンコードします。mp2enc のオプションは以下のものを使っています (詳しくは man mp2enc で)。

-b: ビットレート
-r: サンプリング周波数
-o: 出力ファイル名
mplex を使って映像と音声を合体させましょう。

$ mplex -f 8 -o video.mpg video.m2v video.mpa
-f 8 は DVD 用であることを示します。-o でアウトプットファイル名を指定し 続けてビデオストリーム、オーディオストリームのファイル名を指定します。 (順不同なよう)

tcmplex よりも mplex のほうが音声の同期が正確なようです。

なお、オーディオストリームの video.mpa は MP2 (MPEG1 Audio Layer II) な のですが、これは全ての家庭用 DVD プレーヤーでサポートされているわけでは なさそうです。(自宅の AIWA のプレーヤーでは再生できた) 全ての DVD プレー ヤーでサポートされている AC3 (ドルビーデジタル)形式でも FFMPEGliba52 の組合せでエンコードで きるようですが、ドルビーラボラトリーにライセンス料を支払う必要があるかも しれないためここでは割愛します。少し試したところ、Linux 上で AC3 音声で作成した DVD はうちの上記の家庭用プレーヤーでは再生できましたが、Windows PC では音が出ませんでした。(2004/1/2)

5. オーサリング

dvdauthor は DVD ビデオに必要なディレクトリ構成・ファイルを MPEG ファイルを使って自動的に 生成してくれます。また、オプションを指定することによってチャプター分け、 メニュー作成、サブタイトル挿入など凝った作品を作ることも可能です。(根気 さえあれば) ここでは単純に再生するだけの DVD を作成します。 まずは、ビデオタイトルセット (VTS) を作成します。VTS は DVD の中の各コン テンツの分け方で、例えば映画の DVD で本編と特典映像があったとすると、本 編や特典がそれぞれ独立したタイトルセットになっています。
video.mpg を作成したディレクトリで以下のようにします。

$ dvdauthor -o dvd/ video.mpg
するとそのディレクトリに dvd というディレクトリができ、その中には VIDEO_TS、AUDIO_TS というディレクトリが出来ます。元々 dvd というディレク トリがあった場合、中身は上書きされますので注意しましょう。
VIDEO_TS の中には VTS_01_1.VOB、VTS_01_0.IFO、VTS_01_0.BUP というファイ ルが出来ます。これで DVD ビデオを構成する1つの VTS が出来た ことになります。VTS_01_1.VOB がビデオファイル本体になります。コンテンツ の長さやビットレートによって VTS_01_2.VOB、VTS_01_3.VOB … と複数のファ イルがある場合があります。

簡単にチャプター分けしたい場合は、

$ dvdauthor -o dvd/ -c 0,5:00,10:00,15:00 video.mpg
とします。これによって 5分毎にチャプター分けされ、DVD プレーヤーのスキッ プボタンで先に飛ばすことが出来ます。 次にビデオマネージャ (VMG) を作成します。ビデオマネージャは DVD ビデオ全 体の情報です。

$ dvdauthor -T -o dvd
すると、dvd/VIDEO_TS/ に VIDEO_TS.IFO、VIDEO_TS.BUP というファイルが出来 ます。
これで DVD ビデオのファイル構成が揃いました。

6. DVD イメージ作成、確認、書き込み

DVD ビデオのディスクイメージを作成するには以下のようにします。

$ mkisofs -dvd-video -o dvd.img dvd/

-dvd-video で DVD ビデオ用の UDF ディスクイメージを指定します。DVD ビデ オでは各ファイルのディスク上の物理的順番が決まっており、このオプションは そこら辺を考慮してくれます。-o で作成するイメージファイルのファイル名を 指定します。最後は先ほど作成した DVD ビデオ関連ファイルの入ったディレク トリを指定します。

作ったイメージファイルの確認は XINE で行えます(XINE のインストール方法は 割愛します。tar ball を rpm -ta すれば RPM を作成できます)。XINE の Setting 画面の gui タブで configuration experience leve を Advanced 以上 にし Apply ボタンを押します。そして、input タブの device used for dvd drive で dvd.img を直接指定します。そして OK で閉じて GUI で DVD をクリッ クするとあたかも DVD を再生しているように DVD を再生します。

書き込みは dvdrecord で行います。

$ dvdrecord -scanbus
とすると以下のように SCSI バスにつながっている装置の一覧が出ます。

scsibus0:
	0,0,0	  0) *
	0,1,0	  1) *
	0,2,0	  2) *
	0,3,0	  3) *
	0,4,0	  4) *
	0,5,0	  5) *
	0,6,0	  6) 'MELCO   ' 'MCR-S           ' '1.15' Removable Disk
	0,7,0	  7) *
scsibus1:
	1,0,0	100) 'TOSHIBA ' 'DVD-ROM SD-R5112' '1M30' Removable CD-ROM
	1,1,0	101) '        ' 'DVD/CDRW RW9200 ' '1.30' Removable CD-ROM
	1,2,0	102) *
	1,3,0	103) *
	1,4,0	104) *
	1,5,0	105) *
	1,6,0	106) *
	1,7,0	107) *
scsibus0 は本物の SCSI カードです。scsibus1 が SCSI エミュレーションをし た ATAPI 装置の一覧で、DVD-R/RW ドライブは 1,0,0 につながっている TOSHIBA の DVD-ROM SD-R5112 です。(なぜか DVD-ROM)
書き込むには、

$ dvdrecord -v dev=1,0,0 speed=4 -dao dvd.img

とします。dev=1,0,0 で -scanbus でスキャンしたデバイスの指定、speed=4 で 書き込みスピード、-dao で Disk at Once 書き込みを指定します。

出来たディスクは PC 上では XINE 等で再生できますが (上記の device used for dvd を実際の DVD デバイスにするのを忘れずに)、何と言っても家電 の DVD での再生をしたいものです。DVD-RW に記録したものでも家の AIWA の XD-DV380 では再生できました。また近くのサトームセンに行って勝手に再生さ せてもらったところ TOSHIBA の DVD 付きテレビデオ、ONKYO の DVD ミニコン ポで再生できました。SHARP の DVD 付きテレビデオは使いかたが悪かったのか、 うまく再生が出来ませんでした。その他は試していません。

dvdauthor を使って DVD メニューも作成できます。DVD ビデオ作成 その2:DVD メニューを作るを参照下 さい。


関連リンク:


戻る | real-baishi に戻る