Linuxツール群で行うオリジナルDVDでの字幕作成
SubRip プロジェクトからは、市販のDVD中にキャプションや字幕として収録された情報を固有のフォーマットでテキストファイル化するツールが提供されているが、こうして作成されるSRTファイルと同じ形式のデータに各種のツールを組み合わせることで、通常のプレーヤで操作可能なキャプションを有すDVDを自主作成できるのである。
そうした作業を行うプロセス全体は非常にシンプルである。まず事前に行っておくべき準備作業は、リソース要件の高い処理となるオーディオ/ビデオ系のデータ加工に備えて、高速なCPUと多量のメモリおよび大容量のハードディスクを搭載した作業用コンピュータを用意し、そこに信頼できるDVD焼き込みソフトをインストールしておくことだ。次に具体的な作業として、ミリ秒単位でのタイムフレーム表示に対応した Cinelerra などのビデオエディタを使ってビデオファイルを読み込み、字幕化する部分のタイムインデックスをすべて確認しておく。こうして確認したタイムインデックスについては、会話中の台詞などと共に手作業にてSRTファイルに入力することになるが、最終的にこのファイルはDVD用フォーマットに統合してディスク上に焼き込むことになる。
今回サンプル用プロジェクトとして使ったのは、リンカーン大統領のゲティスバーグ演説の一部を読み上げる父の様子を収めた8秒間のビデオである。まずは、おおざっぱな値でいいから、SRTファイル中にすべてのタイムインデックスを書き出しておく。下記に掲載したのは、その後で実際にビデオを再生しつつ修正を施した結果のSRTファイルである。残りの作業としては、 FFmpeg 、 spumux 、 dvdauthor 、 growisofs などのコマンドライン系ユーティリティを用いた各種の処理を、段階的に実行していくことになる。
SRTファイルの記述フォーマットは極めて単純である。まず各エントリの1行目には、エントリ識別用のシーケンシャル番号を記入しておく。2行目はHH:MM:SS,milliseconds形式(時:分:秒,ミリ秒)のタイムインデックスである。このうち最初のインデックスは字幕テキストの表示を開始する時刻で、その次は表示を終了させる時刻を指定している。最後にくるのは字幕テキストの行だが、画面上には最大2行までしか表示させられない。
1 00:00:00,190 --> 00:00:01,800 Four score and seven years ago 2 00:00:01,820 --> 00:00:05,280 our fathers brought forth on this continent a new nation, conceived 3 00:00:05,300 --> 00:00:07,580 in liberty and dedicated to the proposition that all men are 4 00:00:07,600 --> 00:00:08,280 created equal.
この作成例にてSRTファイルと組み合わせるビデオは、デジタルカメラで撮影したデータをLinuxに転送したAVIファイルである。私が編集作業に使用していたのはUbuntu環境であったため、ファイルの転送をするための実質的な作業は、USBケーブルを介してカメラとコンピュータを接続することだけであった。これによりGthumbがポップアップし、データをインポートするかの確認画面が表示されるので、後は該当するファイルを選択して、インポート用のボタンをクリックするだけで済んでしまった。当然ながらこうした作業は、使用するディストリビューションやカメラごとに変わってくる性質のものである。
SRTファイルのタイムスタンプ指定については、VLCやMPlayerなどのビデオプレーヤ上で実際に試してみないと精密に一致させることは難しいだろう。VLCでこうした作業を行う場合は、Fileメニューの“Use a subtitles file”にて字幕ファイルの使用オプションを有効化し、対象となるファイルのパスと名前を指定する。MPlayerの場合は、コマンドラインから-sub
オプションを用いて字幕ファイルを指定する方が簡単である。
VLCにせよMPlayerにせよ、SRTファイルの表示には若干の遅延が生じてしまう。私がこれらのプログラムをコマンドラインから実行させたところ、字幕の表示までに数秒待たなくてはならなかった。もっとも表示開始後のタイミングに対するテンポのズレなどは生じなかったが、このままでは数秒分の字幕は表示されないままとなってしまう。その対策であるが、MPlayerの場合は-subdelay
オプションにて、字幕の表示タイミングに意図的なディレイを入れることができる。VLCの場合も、字幕ファイル指定時の上級者用設定としてディレイ調整ができるようになっている。こうしたディレイ調整オプションは字幕の表示をどれだけ遅らせるかの指定であり、私の場合は-1という指定で先の問題に対処できたが、これも個々の作業環境で変わってくる性質の設定なので、適切な値については各自が実地に試して見つけて頂きたい。
SRTファイル中のタイムインデックスの適正値が確定できたら、DVDへの焼き込みフォーマットであるMPEG形式にAVIファイルを変換しておく。この処理を行うには、コマンドライン上の操作でビデオファイルの格納ディレクトリに移動してから下記のコマンドを実行すればいいが、ファイル名については各自の使用する値に変更しておかなくてはならない。
ffmpeg -i test.avi -target ntsc-dvd test.mpeg
このコマンド指定では最低限の基本機能しか使っていないが、FFmpegにはその他にも豊富なオプションが用意されており、特に出力関係については細かな指定ができるようになっている。本稿で触れているのは一般的なオプションだけであり、こうしたビデオ編集を頻繁に行うユーザであれば、利用可能なオプションを詳しく調べておいても損はしないだろう。例えば出力するビデオフォーマットについては-target
オプションにより、ヨーロッパで使われているPAL、北米地区(や日本)で使われているNTSC、フランスとロシア圏で使われているSECAMを指定できる。
これ以降の処理を進めるにあたっては、FFmpegでの処理中に出力される情報の一部を確認しておかなくてはならない。具体的には、下記の引用部にて強調表示されている部分の情報が必要となる。
Output #0, dvd, to 'test.mpeg': Stream #0.0: Video: mpeg2video, yuv420p, 720x480, q=2-31, 6000 kb/s, 29.97 fps(c) Stream #0.1: Audio: ac3, 48000 Hz, mono, 448 kb/s
つまりこれから先の作業では、こうしたビデオのフレームレートと解像度が重要な意味を持っているのである。次に行うのは、字幕ファイルをMPEGストリームに統合するためのマルチプレックス化であり、その処理にはspumuxというユーティリティを使用する。なおこのユーティリティは、複数の字幕ファイルをMPEGストリームにマルチプレックス化する機能も有しているので、その気になれば複数言語の字幕切り替えに対応したビデオを作成することもできる。
spumuxは多くのUnix系のコマンドラインユーティリティと異なり、ビデオ本体およびそれに対応させるSRTファイルについての各種操作用のパラメータ群を、(コマンドラインオプションで指定するのではなく)1つのXMLファイル中に記述しておくという仕様になっている。またプロジェクト中で使用すべきフォント群についても、ユーザ各自のhomeディレクトリにある.spumuxフォルダに格納されていることを前提としており、必要なフォントが1つでも欠けているとspumuxはエラーを返すはずである。なおこのフォント指定については、先のXMLファイル中にて絶対パスの指定が使えないかを試してみたのだが、結果は変わらなかった。
下記に掲載したのは、NTSC用に作成したspumux設定のXMLファイルであり、重要な情報については強調表示がしてある。
<subpictures> <stream> <textsub filename="test.srt" fontsize="28.0" font="arial.ttf" force="yes" movie-fps="29.97" subtitle-fps="29.97" movie-width="720" movie-height="480" horizontal-alignment="center" /> </stream> </subpictures>
ここでのtest.srtは字幕ファイルの指定であるが、こうしたSRTファイル、MPEGファイル、XMLファイルはすべて同じディレクトリ中に格納されている必要がある。arial.ttfについては各自の好みとするフォント指定に置き換えればいいが、使用できるのはTrueTypeフォントだけであり、これらは前述した通りにhomeディレクトリの.spumuxフォルダに置いておかなくてはならない。force
オプションは字幕を自動的に強制表示させるための指定であり、自動表示が不要ならば“no”としておく。movie-fps
とsubtitle-fps
の指定値はとりあえず一致させておけばいいが、この値は先のFFmpegにて確認しておいたfps値に合わせておかなくてはならない。movie-height
およびmovie-width
についても、FFmpegで処理された値に合わせておく必要がある。
以上、すべてのファイルの準備と配置および、設定ファイルの指定が完了したら、下記のコマンドを実行する。
spumux -s0 -m dvd -P test-sub.xml < test.mpeg > test-sub.mpeg
ここでの-s0
オプションは、指定した字幕を1番目の字幕スロットに配置させるための指定であり、同じく-s1
などの指定をすれば2番目以降の字幕スロットを使用させることもできる。その次の-m dvd
オプションはDVDフォーマット用のビデオ出力をさせるための指定である。spumuxではSVCDなどその他のタイプを扱うこともできる。最後のオプションである-P
は、作業の進捗状況をプログレスバー表示させるための指定である。そしてtest-sub.xmlは設定ファイルの名前、test.mpegはビデオファイルの名前、test-sub.mpegは作業結果のファイルに付ける名前をそれぞれ指定している。
こうしたspumuxによる作業が完了すると、DVDに焼き込める状態のビデオファイルが作成されているはずである。ここで私はdvdauthorというプログラムを使うことで、少し凝った本格的なメニュー作成をすることにした。このプログラムの使用法については様々なオンラインチュートリアルが公開されているが、その他にもグラフィカル操作を可能とするフロントエンド用プログラムも別途作成されている。いずれにせよ初心者にとっては、各種の関連情報のリンクをまとめたdvdauthorのホームページが参考になるだろう。下記に掲載したのは簡単なサンプルではあるが、dvdauthorの動作はこうしたXMLファイルを介して制御できるようになっている。
<dvdauthor dest="DVD"> <vmgm /> <titleset> <titles> <pgc> <vob file="test-sub.mpeg"/> </pgc> </titles> </titleset> </dvdauthor>
これはあくまで参考用に用意した簡易設定ファイルであり、必要最小限の指定だけしか記述していないが、より本格的なセットアップ例などはオンライン検索で見つけることができるだろう。後はtest-sub.mpegを各自のファイル名に変更した上で、下記のコマンドを実行するだけである。
dvdauthor -x test-dvd.xml
ここでのtest-dvd.xmlはdvdauthor用設定ファイルの指定である。dvdauthorによる処理完了には数分を要するはずだが、その作業結果はDVDサブフォルダに出力されるようになっている。
残された作業は、DVDにビデオを焼き込む処理だけである。それには記録用のブランクDVDをドライブに挿入し、下記のコマンドを実行すればいい。
growisofs -Z /dev/scd0 -dvd-video DVD/
ただしここでの/dev/scd0という指定については、各自のシステムにおけるDVDドライブのデバイスパスに置き換えておく必要がある。ここで用いたのはgrowisofsというユーティリティだが、この焼き込み処理が完了すると一般のDVDプレーヤでも再生可能なDVDが作成されているはずだ。
本稿で解説した作成例は、各プログラムに装備された機能のごく一部を使用しただけのものに過ぎない。その他にどのようなオプションが利用可能であるかは、自分で実地に試して頂きたい。あるいはPythonやPerlのスクリプトを組むことで、全プロセスをオートメーション化するという選択肢もありだろう。またこうした字幕作成を頻繁に行うというユーザはgaupolというエディタを試してみるべきかもしれない。何にせよ、どうせホームビデオの編集をするのであれば、そのついでにオリジナルの字幕を挿入するスキルを披露しておくことで、友人連中に与える感銘も一段と深いものにできるはずだ。
David Pendellは、20年以上前からコンピュータを使ったオーディオ/ビデオ編集を趣味としており、ここ10年間は、組み込み型から中型サーバに至る各種プラットフォームで運用されるLinux関連の仕事に携わっている。