Linux ムービー・動画環境

MPEG ビデオファイルの作り方

2001年11月4日

Xawtv でビデオキャプチャすると Motion JPEG 方式で保存でき、これは結構 コンパクトに圧縮されるんですが、NT4 で再生するには3rd パーティのコーデッ クが必要だったり汎用性は今一つです。また、Video CD や DVD を作成するには MPEG に変換する必要があります。さらに、DV カメラから直接取り込んだ DV 形式の AVI ファイルは Linux では再生もできません (多分私が知らないだけ)。

そこで Linux で MJPEG ファイルを変換したりするのに便利な MJPEG Tools を使って変換してみます。MJPEG Tools はレコーディングからエンコーディングまでをサポートする ビデオツール郡ですが、レコーディングは特定の装置にしか対応していないようです。ここではその中の Motion JPEG の変換ツールと MPEG エンコードツール使用して、AVI から MPEG1 に変換します。DV 形式のファイルはその前に dv2jpg を使って Motion JPEG に変換します。
(MPEG2 にも変換できるけどその必要が今は無いためやらない)

1. MJPEG Tools のインストール
2. Motion JPEG から MPEG1 への変換
3. dv2jpg のインストール
4. DV ファイルから MPEG1 への変換

1. MJPEG Tools のインストール

http://mjpeg.sourceforge.net/ から mjpegtools-1.4.1-1.src.rpm を取ってきて、

# rpm --rebuild mjpegtools-1.4.1-1.src.rpm

として SRPM をインストールします。mjpegtools-1.4.1-1.i386.rpm もあるんですが、最近は glibc のバージョンが古いと言われたりすることも多いので(RH7 などでコンパイルしてるんでしょうか) 最初からコンパイルします。

コンパイルが終了すると、/usr/src/redhat/RPMS/i386/mjpegtools-1.4.1-1.i386.rpm ができているので、

# rpm -ivh /usr/src/redhat/RPMS/i386/mjpegtools-1.4.1-1.i386.rpm

でインストールします。

[2003/04]
最新の MJPEG Tools はビルドするのに nasm と言うのが必要(何なのかは知らない)なので SourceForge のページから RPM を取っ てきてインストールします。

# rpm -ivh nasm-0.98.36-1.i386.rpm

その後に MJPEG Tools をビルド。

$ rpm --rebuild mjpegtools-1.6.1-1.src.rpm
$ cd /home/hoge/rpm/RPM/i386/ (hoge はユーザ名に置き換えてください)
$ sudo rpm -Uvh mjpegtools-1.6.1-1.i386.rpm mjpegtools-devel-1.6.1-1.i386.rpm
(最近はユーザ権限でビルドし、sudo でインストールしています)

2. Motion JPEG から MPEG1 への変換

まず、変換もとの Motion JPEG ファイルですが、これは 25fps 以上で記録されている必要があります。MPEG の規格が 25fps 以上となっているためです。Xawtv などで記録する際に注意しましょう。

変換の手順を順を追って説明します。元ファイルを abc.avi とし、変換後の MPEG ファイルを abc.mpg にするとします。

(1) lav2yuv で Motion JPEG AVI ファイルを YUV 形式に出力。
(なんで Motion JPEG が lav なのか、YUV が何なのかは知りまん)
これは標準出力に出力されるので、パイプで mpeg2enc に渡します。
これで音無しの MPEG1 ファイルができます。

$ lav2yuv abc.avi|mpeg2enc -b 700 -o temp.m1v

-b はビットレートです。(デフォルトは 1152bps) その他数々のオプションがありますが、ここでは割愛します。

(2) lav2wav で Motion Jpeg AVI ファイルから WAVE 形式に出力。
これも標準出力に出力されるので、パイプで mp2enc に渡します。
これで mp2 形式の音声ファイルができます。

$ lav2wav abc.avi|mp2enc -b 128 -o temp.mp2

-b はビットレートです。(デフォルトは224bps) これもオプションがその他有りますが、割愛。

(3) mplex で音無しの MPEG1 ファイルと mp2 音声ファイルを合体させてMPEG1 ファイルのでき上がりです。

$ mplex temp.mp2 temp.m1v -o abc.mpg

一丁上がり。

一連の作業には手間がかかるため、Perl スクリプトを作りました。
avi2mpg です。

$ avi2mpg -i abc.avi -vb 700 -ab 128 -o abc.mpg

とします。-i で変換元ファイル、-vb でビデオのビットレート、-ab で音声のビットレート、-o で出力の MPEG ファイルのファイル名を指定します。-o オプションを省略すると、変換元ファイルの拡張子が mpg になったものに変換されます。

また、その他以下のオプションがあります。
-s: 変換する最初のフレーム
-e: 変換する最後のフレーム
-d: テンポラリファイルを削除する
-v, -yv: Video CD 作成用。その解説と Video CD の作成方法はこちら

mpeg2enc と mp2enc のオプションを多少サポートしています。
mpeg2enc のオプション: -4, -2, -h, -r, -a, -f, -n
mp2enc のオプション: -m (モノラル)

各オプションの説明は man mpeg2enc, man mp2enc などで調べてください。

3. dv2jpg のインストール

DV 形式のファイルを Motion JPEG に変換する dv2jpg をインストールします。

http://sourceforge.net/projects/dv2jpg/ から dv2jpg-1.1.tar.gz をとってきて、

$ tar zxvf dv2jpg-1.1.tar.gz
$ cd dv2jpg-1.1

とします。この中に既にコンパイル済の dv2jpg が有るので、これを適当な場所 (/usr/bin など) にコピーしておきます。

4. DV ファイルから MPEG1 への変換

まず、変換元の DV ファイルはこちらで説明しているように、dvgrab で dv2 形式にてキャプチャしておく必要があります。

変換の手順を順を追って説明します。元ファイルを bbc.avi とし、変換後の MPEG ファイルを bbc.mpg にするとします。

(1) dv2jpg で DV 形式ファイルを Motion JPEG に変換

$ dv2jpg bbc.avi temp.avi

(2) lav2yuv で Motion JPEG AVI ファイルを YUV 形式に出力し、mpeg2enc にパイプ。 2-(1) と同様。

$ lav2yuv temp.avi|mpeg2enc -b 700 -o temp.m1v

(3) lav2wav で DV AVI ファイルから WAVE 形式に出力し、mp2enc にパイプ。2-(2) 項と同様。

$ lav2wav bbc.avi|mp2enc -b 128 -o temp.mp2

(4) mplex で音無しの MPEG1 ファイルと mp2 音声ファイルを合体させてMPEG1 ファイルのでき上がりです。2-(3) 項と同様。

$ mplex temp.mp2 temp.m1v -o bbc.mpg

これも結構一連の作業には手間がかかるのでスクリプトを作りました。 dv2mpg です。使用方法は avi2mpg と同じです。


関連リンク:


戻る | real-baishi に戻る