7.4. ビデオ再生

寄稿: Ross Lippert.

ビデオ再生は今まさに成長中の新しいアプリケーション分野です。 辛抱強くしてください。 音声のようにすべてが順調にいくとは限りません。

設定をはじめる前に、あなたが持っているビデオカードのモデル、 そのカードが使用しているチップを確認する必要があります。 Xorg および XFree86 はさまざまなビデオカードに対応していますが、 ビデオ再生に申し分のない性能を発揮できるカードはわずかです。 あなたのビデオカードの利用している X サーバが対応している拡張機能のリストを得るには、 X11 を実行中に xdpyinfo(1) コマンドを実行してください。

さまざまなプレイヤやオプションを試すのに、 テストファイルとして小さな MPEG ファイルを用意しておくのはよい考えです。 いくつかの DVD プレイヤは DVD メディアを /dev/dvd として 初期設定しているか、ハードコーディングされているので、 次のように適切なデバイスにシンボリックリンクを張っておくと便利かもしれません。

# ln -sf /dev/acd0 /dev/dvd
# ln -sf /dev/acd0 /dev/rdvd

devfs(5) の仕様により、 このように手動で作成されたリンクは再起動すると消えてしまいます。 システムの起動時にこれらのシンボリックリンクを自動的に作成するには、 /etc/devfs.conf に下記の設定を追加します。

link acd0 dvd
link acd0 rdvd

加えて、特別な DVD-ROM 機能を必要とする DVD 解読は、 DVD デバイスへの書き込み権限が必要です。

共有メモリ X11 インタフェースを改善するために、 いくつかの sysctl(8) 変数の値を増やすことが推奨されています。

kern.ipc.shmmax=67108864
kern.ipc.shmall=32768

7.4.1. ビデオ機能の決定

X11 においてビデオ表示性能を改善する方法はいくつかあると思われます。 ちゃんと動作するかどうかはハードウェアに大きく依存しています。 下記に説明したどの方法でも、 ハードウェアが変わると品質が変わるでしょう。 二つ目に、X11 でのビデオレンダリングは最近多くの注目を集めるトピックです。 そして XorgXFree86 のバージョンを追うごとに、著しく改良されているかもしれません。

よく知られたビデオインタフェースは次の通りです。

  1. X11: 共有メモリを用いた通常の X11 出力

  2. XVideo: X11 drawable 内でのビデオ再生に対応した X11 インタフェースの拡張機能

  3. SDL: Simple Directmedia Layer

  4. DGA: Direct Graphics Access

  5. SVGAlib: 低レベルコンソールグラフィックレイヤ

7.4.1.1. XVideo

XorgXFree86 4.X には XVideo (または Xvideo, Xv, xv) と呼ばれる拡張機能があります。 これは特別なアクセラレーションによって drawable オブジェクト に直接ビデオを表示することができます。 この拡張機能によって、 低速なマシンでも、とてもすぐれた品質の再生が可能となります。

この拡張機能が動作しているかどうかを調べるには、 xvinfo を使います。

% xvinfo

以下のような結果が得られたならば、あなたのカードは XVideo に対応しています。

X-Video Extension version 2.2
screen #0
  Adaptor #0: "Savage Streams Engine"
    number of ports: 1
    port base: 43
    operations supported: PutImage
    supported visuals:
      depth 16, visualID 0x22
      depth 16, visualID 0x23
    number of attributes: 5
      "XV_COLORKEY" (range 0 to 16777215)
              client settable attribute
              client gettable attribute (current value is 2110)
      "XV_BRIGHTNESS" (range -128 to 127)
              client settable attribute
              client gettable attribute (current value is 0)
      "XV_CONTRAST" (range 0 to 255)
              client settable attribute
              client gettable attribute (current value is 128)
      "XV_SATURATION" (range 0 to 255)
              client settable attribute
              client gettable attribute (current value is 128)
      "XV_HUE" (range -180 to 180)
              client settable attribute
              client gettable attribute (current value is 0)
    maximum XvImage size: 1024 x 1024
    Number of image formats: 7
      id: 0x32595559 (YUY2)
        guid: 59555932-0000-0010-8000-00aa00389b71
        bits per pixel: 16
        number of planes: 1
        type: YUV (packed)
      id: 0x32315659 (YV12)
        guid: 59563132-0000-0010-8000-00aa00389b71
        bits per pixel: 12
        number of planes: 3
        type: YUV (planar)
      id: 0x30323449 (I420)
        guid: 49343230-0000-0010-8000-00aa00389b71
        bits per pixel: 12
        number of planes: 3
        type: YUV (planar)
      id: 0x36315652 (RV16)
        guid: 52563135-0000-0000-0000-000000000000
        bits per pixel: 16
        number of planes: 1
        type: RGB (packed)
        depth: 0
        red, green, blue masks: 0x1f, 0x3e0, 0x7c00
      id: 0x35315652 (RV15)
        guid: 52563136-0000-0000-0000-000000000000
        bits per pixel: 16
        number of planes: 1
        type: RGB (packed)
        depth: 0
        red, green, blue masks: 0x1f, 0x7e0, 0xf800
      id: 0x31313259 (Y211)
        guid: 59323131-0000-0010-8000-00aa00389b71
        bits per pixel: 6
        number of planes: 3
        type: YUV (packed)
      id: 0x0
        guid: 00000000-0000-0000-0000-000000000000
        bits per pixel: 0
        number of planes: 0
        type: RGB (packed)
        depth: 1
        red, green, blue masks: 0x0, 0x0, 0x0

リストにある形式 (YUV2, YUV12 など) が XVideo のすべての実装で存在するとは限りません。 対応している形式が少ないために、あるプレイヤでは悪影響が出る かもしれないことにも注意してください。

出力が以下のような場合、

X-Video Extension version 2.2
screen #0
no adaptors present

あなたのカードはおそらく XVideo に対応していないのでしょう。

あなたのカードが XVideo に対応していないとしても、 このことはあなたのディスプレイでビデオを表示するのに、 計算上の要求を満たすことがより困難になるだけのことです。 しかしながら、あなたのビデオカードおよびプロセッサによっては、 それでも満足のいく性能が得られるかもしれません。 性能を向上させるには Section 7.4.3 をよく読むとよいでしょう。

7.4.1.2. Simple Directmedia Layer

Simple Directmedia Layer (SDL) は Microsoft® Windows®, BeOS そして UNIX® の間で サウンドとグラフィックスを効果的に利用した クロスプラットホームアプリケーションを 開発することを目的としたレイヤです。 SDL レイヤはハードウェアに対する低レベルの抽象的概念を提供し、 時には X11 インタフェースを使用するよりも効果的なことがあります。

SDL は devel/sdl12 からインストールできます。

7.4.1.3. Direct Graphics Access

Direct Graphics Access は、 プログラムが X サーバを介せず 直接フレームバッファを変更することを可能にする X11 の拡張機能です。 共有メモリを使用するために 低レベルのメモリマッピングが実行できることを期待しているので、 この機能を使うプログラムは root 権限で実行されなければなりません。

DGA 機能拡張は dga(1) によってテストとベンチマークができます。 dga 実行中はキーボードを押せばいつでもディスプレイ色が変更されます。 中止するには q を押します。

7.4.2. ビデオを扱う ports および packages

この節では Ports Collection で利用可能な、 ビデオの再生に使用できるソフトウェアについて論じます。 ビデオ再生は大変活発なソフト開発分野で、 さまざまなアプリケーションの機能は、 ここでの説明から省かざるをえません。

はじめに、FreeBSD で実行できるビデオアプリケーションの多くは、 Linux アプリケーションとして開発されたということを知ることは重要です。 これらのアプリケーションの多くはまだベータ版の品質です。 FreeBSD でこれらのビデオアプリケーションを使用する際に、 以下のような問題が起こるかもしれません。

  1. あるアプリケーションが、 他のアプリケーションの作成したファイルを再生できない。

  2. あるアプリケーションが、 自身の作成したファイルを再生できない。

  3. 二つの異なるマシンで構築した同じアプリケーションが、 同じファイルを再生する挙動がそれぞれ異なる。

  4. イメージサイズ変更のように見たところではありふれたフィルタが、 バグの多いサイズ変更ルーチンによってひどい人工物を作成する。

  5. アプリケーションがよくコアダンプする。

  6. 文書が port と一緒にインストールされない (文書は web サイトにあったり、その port の work ディレクトリの中に 残っていることがある)。

これらのアプリケーションの多くはさらに “Linux 主義” を主張するかもしれません。 すなわち、アプリケーションの作者が仮定した、 Linux ディストリビューションでのみ実装されている ある標準ライブラリの使用方法や Linux カーネルの特定の機能に起因する問題が生じるかもしれません。 必ずしも port 保守担当者がこれらの問題を把握して作業しているとは限らず、 次のような問題が発生する可能性があります。

  1. プロセッサの特性を検知するための /proc/cpuinfo の利用

  2. 本当はプログラムを終了させるはずであるのに、 停止させてしまうようなスレッドの誤用

  3. 一般的にアプリケーションとともに使用され、まだ FreeBSD の Ports Collection に収録されていないソフトウェアを必要とする

これまで、これらのアプリケーションの開発者は、 移植に必要だったその場しのぎの回避方法を最小化し 問題を解決するために port 保守担当者と協力しています。

7.4.2.1. MPlayer

MPlayer は最近開発され、 急激に成長しつつあるビデオプレイヤです。 MPlayer チームの目的は、 Linux や他の Unix 系 OS 上で高速性と柔軟性をもたらすことです。 このプロジェクトは、 チーム創設者が当時利用可能だったビデオプレイヤの ひどい再生能力にうんざりしたのをきっかけとして始まりました。 合理化された設計のために GUI が犠牲にされたと言う人もいます。 しかしながら、コマンドラインオプションおよびキーボード操作に 一度慣れれば非常によく動作します。

7.4.2.1.1. MPlayer の作成

MPlayermultimedia/mplayer にあります。 MPlayer は 構築の際にさまざまなハードウェアのチェックをするため、 あるシステムで作成されたバイナリは、 別のシステムで利用できないかもしれません。 したがって port から構築し、 バイナリパッケージを利用しないことが重要です。 さらに、Makefile や構築のはじめに説明されるように、 make のコマンドラインで多くのオプションを指定することができます。

# cd /usr/ports/multimedia/mplayer
# make
N - O - T - E

Take a careful look into the Makefile in order
to learn how to tune mplayer towards you personal preferences!
For example,
make WITH_GTK1
builds MPlayer with GTK1-GUI support.
If you want to use the GUI, you can either install
/usr/ports/multimedia/mplayer-skins
or download official skin collections from
http://www.mplayerhq.hu/homepage/dload.html

ほとんどのユーザにとっては port のデフォルトオプションで十分でしょう。 しかしながら、XviD コーデックが必要なら、 WITH_XVID オプションをコマンドラインで指定しなければなりません。 また、デフォルトの DVD デバイスを WITH_DVD_DEVICE オプションで定義することもできます (デフォルトでは /dev/acd0 が使用されます)。

この文書を執筆している時点では、 MPlayer の port は HTML 文書、そして mplayermencoder という二つの実行可能なバイナリを構築します。 mencoder はビデオを再エンコーディングするためのツールです。

MPlayer のための HTML 文書は非常に有益です。この章で不足した ビデオハードウェアおよびインタフェースに関する情報があれば、 MPlayer の文書は非常に詳細な補足になります。 UNIX のビデオ対応情報を探しているのなら、時間を割いて MPlayer の文書を読むべきなのは 明らかです。

7.4.2.1.2. MPlayer の使用

MPlayer を使用する人はすべて、 各自のホームディレクトリ内に .mplayer サブディレクトリを用意しなければなりません。 この必要となるサブディレクトリを作成するために、 次のコマンドを入力します。

% cd /usr/ports/multimedia/mplayer
% make install-user

mplayer のコマンドオプションはマニュアルに記載されています。 さらにより詳細な説明について知りたいなら、HTML 文書をご覧ください。 この節では、一般的な使用法についてほんの少し説明します。

さまざまなビデオインタフェースの一つを用いて testfile.avi というファイルを再生するには、 -vo オプションを指定します。

% mplayer -vo xv testfile.avi
% mplayer -vo sdl testfile.avi
% mplayer -vo x11 testfile.avi
# mplayer -vo dga testfile.avi
# mplayer -vo 'sdl:dga' testfile.avi

ビデオ再生の相対的性能は多くの要因に依存し、 ハードウェアに応じて著しく変わると思われるので、 これらのオプションをすべて試してみる価値はあるでしょう。

DVD を再生するには、 testfile.avidvd://N -dvd-device DEVICE に置き換えてください。 <N> には再生するタイトル番号を、 DEVICE は DVD-ROM のデバイスノードを指定します。 たとえば、/dev/dvd から 2 番目のタイトルを再生するには以下のようにします。

# mplayer -vo xv dvd://3 -dvd-device /dev/dvd

Note: デフォルトの DVD デバイスは、 MPlayer port の構築時に WITH_DVD_DEVICE で定義することができます。 デフォルトでは /dev/acd0 になります。 詳細はこの port の Makefile をご覧ください。

停止、休止、再生などをするにはキーの割り当てを調べてください。 mplayer -h を実行したり、 マニュアルを読めばわかります。

再生に関してさらに重要なオプションがあります。 全画面モードにする -fs -zoom オプションと、 性能を向上させる -framedrop オプションです。

mplayer に指定するコマンドラインが長くなりすぎないように、 .mplayer/config を作成してデフォルトのオプションを設定できます。

vo=xv
fs=yes
zoom=yes

最後に mplayer は DVD タイトルを .vob ファイルに抽出するのに使用できます。 DVD から 2 番目のタイトルをダンプするには次のようにします。

# mplayer -dumpstream -dumpfile out.vob dvd://2 -dvd-device /dev/dvd

出力された out.vob ファイルは MPEG 形式で、 この節で説明される他のアプリケーションで編集できます。

7.4.2.1.3. mencoder

mencoder を使う前に、 HTML 文書を読んでオプションに慣れておくのはよい考えです。 マニュアルもありますが、HTML 文書なしではあまり有用ではありません。 品質向上、低ビットレート、形式変換をする方法が無数にあります。 これらの要素の調節具合で、性能が良かったり悪かったりするなど、 結果に違いが出るかもしれません。 ここにいくつか例を示します。 はじめは単純なファイルのコピーです。

% mencoder input.avi -oac copy -ovc copy -o output.avi

コマンドラインオプションを不適切に組合せると、 mplayer でさえ再生できない出力ファイルを作成してしまいます。 したがって、単にファイルを抽出したいときには、 mplayer-dumpfile オプションをつけます。

input.avi を音声に MPEG3 エンコードを使用して MPEG4 コーデックに変換するには次のようにします (audio/lame が必要です)。

% mencoder input.avi -oac mp3lame -lameopts br=192 \
     -ovc lavc -lavcopts vcodec=mpeg4:vhq -o output.avi

これは mplayerxine で再生可能な出力ファイルを作成します。

DVD タイトルを直接再エンコードするためには、 上記のコマンドラインの input.avidvd://1 -dvd-device /dev/dvd に置き換えて、 root 権限で実行します。 はじめの作業結果に不満をもつと思われるので、 タイトルをファイルにダンプして、ファイルに対して作業することを おすすめします。

7.4.2.2. xine ビデオプレイヤ

xine ビデオプレイヤは オールインワンのビデオソリューションであるだけでなく、 プラグインで拡張できる再利用可能な基本ライブラリと 実行可能なモジュールを提供する広範囲のプロジェクトです。 multimedia/xine の port と package の両方からインストールできます。

xine プレイヤは開発途上であり まだ非常に荒削りですが、通常の利用には十分安定しています。 実用上、xine を使用するには高速なビデオカードとともに高速な CPU があるか、 またはビデオカードが XVideo 拡張に対応していることが必要です。 GUI も利用できますがすこし扱いにくいです。

この文書を執筆している時点では、 xine と一緒に提供されている CSS エンコードされた DVD を再生する入力モジュールはありません。 このモジュールがあるサードパーティの構築物はいくつかありますが、 これらのどれも FreeBSD の Ports Collection には収録されていません。

xineMPlayer と比べて 利用者にとって多くのことをしてくれますが、 と同時にきめの細かい制御ができません。なお、 xine ビデオプレイヤは、 XVideo インタフェース上で最良の性能を発揮します。

デフォルトでは、xine プレイヤは GUI 付きで起動するでしょう。 その後、メニューを使用して特定のファイルを開くことができます。

% xine

GUI なしでファイルを直ちに再生するには、 次のコマンドを実行します。

% xine -g -p mymovie.avi

7.4.2.3. transcode ユーティリティ

transcode というソフトウェアは、 プレイヤではなくビデオおよびオーディオファイルを再エンコードするためのツール一式です。 transcode を使えば、 stdin/stdout インタフェースとともに コマンドラインツールを用いることによって、 ビデオファイルの統合や、壊れたファイルの修復ができます。

multimedia/transcode port では、数多くのビルドオプションを指定できますが、 以下のコマンドラインのように transcode を構築することをおすすめします。

# make WITH_OPTIMIZED_CFLAGS=yes WITH_LIBA52=yes WITH_LAME=yes WITH_OGG=yes \
WITH_MJPEG=yes -DWITH_XVID=yes

ほとんどのユーザにとっては、この設定で十分です。

transcode の能力を示す例として、DivX ファイルを PAL MPEG-1 (PAL VCD) ファイルに変換する使用例を示します。

% transcode -i input.avi -V --export_prof vcd-pal -o output_vcd
% mplex -f 1 -o output_vcd.mpg output_vcd.m1v output_vcd.mpa

作成された MPEG ファイル、 output_vcd.mpg は、 MPlayer を使って再生できます。 また、ファイルを CD-R メディアに書き込むことでビデオ CD も作成できます。 この場合には、multimedia/vcdimager および sysutils/cdrdao プログラムをインストールする必要があるでしょう。

transcode のマニュアルもありますが、 transcode wiki から、更なる情報や使用例を得てください。

7.4.3. さらに進んだ情報

FreeBSD 用のさまざまなビデオソフトウェアは急速に成長しています。 近い将来、ここにあげた問題の多くが解決している可能性は高いでしょう。 それまでの間、FreeBSD の A/V 能力を最大限発揮させたい人々は、 FAQ およびチュートリアルから得た知識を寄せ集めて、 わずかなアプリケーションを使用しなければならないでしょう。 この節は、読者に そのような付加的な情報へのポインタを提供するために存在します。

MPlayer の文書 は技術的に非常に有益です。 おそらく、UNIX ビデオの高水準な専門的知識を得たい人はすべて、 これらの文書を調べるべきです。 MPlayer メーリングリストを購読している人たちは、 文書を面倒がって読まない人には、それが誰であれ反感を持ちます。 そのため、彼らにバグ報告をするときには、マニュアルを読んでください。

xine HOWTO にはすべてのプレイヤに一般的な性能向上についての章が含まれています。

最後に、読者が試みるかもしれない 有望なアプリケーションをいくつかあげます。