8.4. ビデオ再生

寄稿: Lippert Ross [FAMILY Given].

ビデオ再生のための設定をはじめる前に、ビデオカードのモデル、 そのカードが使用しているチップを確認する必要があります。 Xorg はさまざまなビデオカードに対応していますが、 ビデオ再生に申し分のない性能を発揮できるカードはわずかです。 利用しているビデオカードの Xorg サーバが対応している拡張機能のリストを得るには、 Xorg を実行中に 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 デバイスへの書き込み権限が必要です。

Xorg インタフェースの使う共有メモリを拡張するために、 以下の sysctl(8) 変数の値を増やすことが推奨されています。

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

8.4.1. ビデオ機能の決定

Xorg においてビデオ表示性能を改善する方法はいくつかあります。 正しく動作するかどうかはハードウェアに大きく依存しています。 下記に説明したどの方法でも、 ハードウェアが変わると品質が変わるでしょう。

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

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

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

  3. SDL: Simple Directmedia Layer

  4. DGA: Direct Graphics Access

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

8.4.1.1. XVideo

Xorg には 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 に対応していないのでしょう。 このことはディスプレイでビデオを表示するのに、 計算上の要求を満たすことがより困難になることを意味します。 ビデオカードおよびプロセッサによっては、 それでも満足のいく性能が得られるかもしれません。

8.4.1.2. Simple Directmedia Layer

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

SDLdevel/sdl12 package または port からインストールできます。

8.4.1.3. Direct Graphics Access

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

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

8.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 に収録されていないソフトウェアを必要とする

8.4.2.1. MPlayer

MPlayer はコマンドラインのビデオプレイヤで、 高速性と柔軟性をもたらすグラフィカルなインタフェースも持っています。 他のグラフィカルなフロントエンド同様、このアプリケーションも FreeBSD Ports Collection からインストールできます。

8.4.2.1.1. MPlayer の作成

MPlayermultimedia/mplayer package または port からインストールできます。 いくつかのコンパイル時のオプションを設定することができ、また、 構築の際にさまざまなハードウェアのチェックがおこなわれます。 そのため、package からインストールを行わず、 port から構築することを好むユーザもいます。 以下のコマンドを実行すると、 メニューで利用可能なオプションが表示されます。

# cd /usr/ports/multimedia/mplayer
# make

メニューのオプションは、 port にコンパイル時にオプションとしてどの形式に対応するかを決定するため、見ておく必要があります。 オプションが選択されていなければ MPlayer は、 その形式のビデオ形式を表示することは出来ません。 矢印キーとスペースキーを使って必要な形式を選択してください。 選択が終わったら、Enter を押して、 port の構築とインストールを続けてください。

デフォルトでは、この packege または port は、 mplayer コマンドラインユーティリティと gmplayer グラフィカルユーティリティを構築します。 ビデオをエンコードする必要があれば、 multimedia/mencoder port をインストールしてください。 ライセンスの制限のため、 MEncoder の package は利用できません。

8.4.2.1.2. MPlayer の使用

MPlayer を初めて起動すると、 各自のホームディレクトリ内に .mplayer が作成されます。このサブディレクトリには、 ユーザ固有の設定ファイルのデフォルトバージョンが含まれています。

この節では、一般的な使用法についてのみ説明します。 数多くのオプションの完全な説明については、 mplayer のマニュアルに記載されています。

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

注記:

デフォルトの DVD デバイスは、 MPlayer port の構築時に WITH_DVD_DEVICE=/path/to/desired/device を追加することでで定義できます。 デフォルトでは、デバイスは /dev/acd0 です。 詳細はこの port の Makefile.options をご覧ください。

停止、休止、再生などをするにはキーの割り当てを調べてください。 これらの説明は、mplayer -h を実行すると表示されます。 もしくは、マニュアルを読んでください。

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

よく使用するオプションについては、各ユーザの .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 形式で、 この節で説明される他のアプリケーションで編集できます。

MPlayer ドキュメンテーション には技術的な情報があり、 UNIX® ビデオについて、 高レベルのノウハウを得たいと考えている方はご覧ください。 MPlayer メーリングリストは、 ドキュメンテーションを読むのが苦ではない方には適していません。 バグを報告する前に、最初にドキュメンテーションをご覧ください。

8.4.2.1.3. MEncoder

mencoder を使う前に、 HTML 文書 を読んでオプションに慣れておくのはよい考えです。 品質向上、低ビットレート、形式変換をする方法が無数にあります。 これらの要素の調節具合で、性能が良かったり悪かったりするなど、 結果に違いが出るかもしれません。 コマンドラインオプションを不適切に組合せると、 mplayer でさえ再生できない出力ファイルを作成してしまいます。

はじめは単純なファイルのコピーです。

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

したがって、単にファイルを抽出したいときには、 mplayer-dumpfile をつけます。

input.avi を音声に MPEG3 エンコードを使用して MPEG4 コーデックに変換するには、まず最初に audio/lame port をインストールしてください。 ライセンスの制限により、package は利用できません。 インストールしたら、以下のように入力してください。

% 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 権限で実行します。 期待する結果を得るには何度か繰り返すことになるので、 タイトルをファイルにダンプして、 ファイルに対して作業することをおすすめします。

8.4.2.2. xine ビデオプレイヤ

xine は、 再利用可能な基本ライブラリと、 プラグインで拡張できる実行可能なモジュールを提供するビデオプレイヤです。 multimedia/xine package または port からインストールできます。

実用上、xine を使用するには高速なビデオカードとともに高速な CPU があるか、 またはビデオカードが XVideo 拡張に対応している必要があります。 XVideo インタフェースとともに xine ビデオプレイヤを使うのが最良です。

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

xine は、 GUI なしでファイルを直ちに再生することもできます。

% xine

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

% xine -g -p mymovie.avi

xine HOWTO には、 すべてのプレイヤで一般的なパフォーマンスの改善について書かれている章があります。

8.4.2.3. transcode ユーティリティ

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

transcode は、 multimedia/transcode package もしくは port からインストールできます。 多くのユーザは port からコンパイルすることを好みます。 port では、コンパイルで有効にするサポートやコーデックを指定するコンパイルオプションのメニューを利用できるためです。 オプションを選択しないと、transcode は、その形式をエンコード出来ないでしょう。 矢印キーとスペースバーを使って、 必要とするフォーマットを選択してください。 選択が終わったら、 Enter を押して、port のコンパイルとインストールを続けてください。

この例では、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 から、更なる情報や使用例を得てください。

本文書、および他の文書は ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ からダウンロードできます。

FreeBSD に関する質問がある場合には、 ドキュメント を読んだ上で <questions@FreeBSD.org> まで (英語で) 連絡してください。

本文書に関する質問については、 <doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。