西川和久の不定期コラム

GPGPU/CUDAで快適動画編集入門



CUDA動画編集セット!?

 ゲームを全くしない筆者にとって、これまでGPUは安定して動けば何でも良かった存在だ。実際、年始に作ったマインマシンのビデオカードはATI Radeon HD 4550だが、PCI Express x16でDVIが付いていれば何でもOKだった。ところが仕事の関係から動画編集をお手伝いすることになり、一気に「GPGPU」に興味がわいた。今回はそのドタバタ記をお届けしたい。

Text by Kazuhisa Nishikawa

●「TMPGEnc 4.0 XPress」をはじめて使う

 まず「GPGPU」とは何かを簡単に説明すると、ここ数年、強力になってきたグラフィックエンジン=GPUをCPUの代わりに演算させようというものだ。ただGPUの特性上、分岐処理が苦手で普通のアプリケーションには使えず、音声処理、デジタル画像処理、ビデオ変換処理などのマルチメディア処理を得意とする。従って動画編集やエンコードは「GPGPU」の本領発揮できる分野なのだ。ただGPUへアクセスする方法がアプリケーション毎に勝手に行なうのはいろいろな意味で問題があるため、NVIDIAから「CUDA」と呼ばれるGPGPU専用の統合開発環境が登場した。これに則ってアプリケーションを作ればGPUのパワーを使うことが可能になる。ちなみにAMDでも「ATI Stream」と呼ばれる同類の環境が存在する。

 当初、筆者が担当するのは動画編集と言っても内容は非常に簡単。1本のオリジナルファイルにインタビューが何本も入っていて、それを1本1本切り出し、フェードイン/アウトを付け、音量を均一化し、指定のフォーマットで出力……こんな感じの処理だった。

 「CUDA」「動画のエンコード」「カット編集」となると一番に思い当たるのが「TMPGEnc 4.0 XPress」だろう。実際CUDAと組み合わせたレビューも数多く載っているので参考になる。早速インストールして試してみることにした。この段階でパソコンへ搭載しているGPUは「ATI Radeon HD 4550」なので「CUDA」は使えず、CPUだけでのエンコードだ。作業の流れは以下の通り。

1)先方
SONY DSR PD-150で撮影
・IEEE 1394経由でAVIファイルへ
・AVIファイルをFTPでやり取りするにはサイズが大き過ぎるのでWindows Mediaファイル形式へエンコード
2)筆者
・FTPで動画ファイルをダウンロード
・インタビューを1人1人切り出す
・インターレース解除、フェードイン/アウト追加、音声ボリューム調整、リサイズ、必要であればクロップや色調補正
・指定のWindows Mediaファイル形式へエンコード
・FTPを使いアップロード
3)先方
・受け取ったWindows MediaファイルをDRM付の3GPPへエンコード

 「TMPGEnc 4.0 XPress」でも3GPPへ直接エンコード出来るのだが、DRMには対応していないので、このような感じでやり取りしている。

 実際に「TMPGEnc 4.0 XPress」を使う部分は、筆者の作業ではFTP以外の部分が全て該当する。まず、素材を入力指定し「クリップ分割点に指定/解除」を使ってざっくり1人1人を切り出しその後、クリップ分割を行ない各インタビューの開始/終了フレームを微調整、先に記述したフィルタ設定、そしてエンコードとなる。写真はもう長年やっているのだが、簡単な内容とは言え動画の編集も「TMPGEnc 4.0 XPress」も初めて。1日ほど試行錯誤して、現在のパターンに落ち着いた。

 加えてインタビューは1人3分前後。ドコモの10M iモーションが対象なので最大でも5分だ。PCのCPUが「Core 2 Quad Q8200」と言う事もあり、特に「CUDA」の必要性も感じず短時間でエンコードが終了している。ただ1人分は数分でも本数が多いとその分時間がかかるため、最終的には「バッチエンコードツール」を使い、一気にまとめてエンコードを行なう事が多い。

TMPGEnc 4.0 XPress/クリップ分割点に指定。帯の色が違う部分が各クリップ。ざっくり切り出してから開始/終了フレームを設定している。(以降、内容が分かるような、画像、サムネイル、フォルダ名には申し訳ありませんがモザイク処理を施しています。予めご了承下さい)TMPGEnc 4.0 XPress/フィルタ設定。通常はここまでフィルタは使わない。たまたま元画像が16:9で少し暗めだったので、4:3へクロップ、色調補正で明るくしているTMPGEnc 4.0 XPress/エンコード設定。指定の納品フォーマット。最終的には10Miモーションになるので、あまりビットレートを高くしても仕方ないのだろう

●「GeForce 9400 GT」へ交換したが……。

 せっかく「CUDA」に対応した「TMPGEnc 4.0 XPress」があるので「CUDA」を試してみたいと思うのは人情。ただ試すには「ATI Radeon HD 4550」ではもちろんNG。NVIDIAのGPUが必要だ。そこでたまたま事務所にあった「GeForce 9400 GT」と入れ替えることにした。

 早速「TMPGEnc 4.0 XPress」を起動し「CUDA」を使おうとしたところ……何故か「GeForce 9400 GT」を認識しない。当時のバージョンは「Ver.4.7.0.280」。いろいろ環境をチェックした結果、USB接続のディスプレイ「DisplayLink」のドライバがあると誤認識する様だ。またこの現象は、単にDisplayLinkデバイスの電源OFFするだけでは駄目で、ドライバを完全にOSから削除する必要があった。余談になるがこの時、株式会社ぺガシスのサポート担当とこの件に付いてメールでやり取りしたが、非常に迅速且つ適切な対応だった。この場を借りてお礼を述べたい。なお、その後、「Ver.4.7.1.284」が出てこの問題は解決している。

 こうしてやっと「CUDA」が使えるようになり、あれこれ試したところ、驚きの(笑える)結果が! フィルタをいっぱい使い、いろいろな種類のエンコードしてもCPUパワーの割りにGPUが非力過ぎて一切CUDAが使われないのだ。「TMPGEnc 4.0 XPress」は環境を調べCPUとGPUの割振りを自動的に最適化する。その結果が「CPU:100%、CUDA:0%」だ。GeForce 9400は「IONプラットフォーム」にも「GeForce 9400M G」として同種のものが乗っている16コアのGPU。4月21日にあった「Aspire Revo」初披露の会場ではGPGPU/CUDAを使ったデモがあり、かなり強力な印象を受けたが、考えてみればIONプラットフォームのCPUはAtomプロセッサ。16コア程度ではCore 2 Quadクラスだと全く吊り合わないのだろう。

Ver.4.7.0.280では、環境によってドライバのバージョンが指定のものより上にも関わらず認識しないと言う現象があったやっと認識したCUDA/GeForce 9400 GT。左側の項目を見れば分かるように、CUDAだけでなく「マルチスレッド」にも対応しているのでCore 2 Quadでは効果ありそうだ「CPU:100%、CUDA:0%」。「Core 2 Quad Q8200」vs「GeForce 9400 GT」ではCUDAを使うまでも無く、CPUのみの方が効率が良いと言うことになる

 こうして1回目のCUDAチャレンジは不発に終わった。しかし、これまで何をしてもCPUの使用率が100%近くなることがなかったメインマシンで、初めて4CPU共100%近くまで行く表示を見て、ある意味感動した。使い出して半年近く。やっと本領発揮と言ったところだろう。

●「GeForce GTX 260」を購入

 ここまで試して「CPU:100%、CUDA:0%」のまま終わるのは面白くないので、強力なGPUを購入することに……。ネットなどでいろいろ情報を仕入れたところ「GeForce GTX 260」を搭載したシステムで(当時)2万円を切り一番安価だった「Palit GeForce GTX 260 Sonic 216 SP(PCIExp 896MB)」をチョイスした。もちろん更に上位のGTX 285/280などもあるが軽く3万円オーバー。流石にCUDA目的で手を出すには躊躇する価格帯だ。主要な仕様は以下の通り。

GPUNVIDIA GeForce GTX 260
バスPCI Express x16 (2.0対応)
コア数216
メモリ容量896MB
メモリバス幅448bit
メモリ種類GDDR3
コアクロック/メモリクロック625MHz / 2,200MHz
モニタ出力DVI-I×2(デュアルリンク対応)
TV出力HDTV
冷却FAN×2
その他2スロット占有、3-way SLI対応、HDCP対応

 届いてまず驚いたのはそのサイズ。秋葉原でいろいろなビデオカードを眺めてはいたので一応予備知識はあったものの、改めてこれまで使っていた「GeForce 9400 GT」と比較すると、ご覧のようにまるで「大人4人」と「子供1人」と言った感じで圧倒される。加えてマシンへの装着は、奥行きがあり過ぎてHDDと干渉。HDDの位置をずらして何とか収まった。ファンが2つもあり、煩いかと思っていたが、起動時にちょっと強烈な音がするだけで、その後すぐにファンの音は静かになる。

「Palit GeForce GTX 260 Sonic 216 SP(PCIExp 896MB)」パッケージ一式。アナログRGBとHDMIは変換アダプタでの対応だ。ドライバはNVIDIAのサイトから最新版をダウンロードした。環境は64bit版Windows Vista補助電源コネクタ×2とS/PDIF入力。後述するが、この「補助電源コネクタ」が曲者だったGeForce 9400 GTとの比較。まったくお話にならないほど違うサイズに、巨大なファンが2つ。いつの間にかGPUはこんな世界に突入していた
HDDとの干渉で位置を変更後。元々はたまたますぐ後ろにHDDがあった。HDDの下にはCドライブ用のSSDが入っている。しかしこれだけ大きいと、結構余裕のあったケースが急に窮屈となるドライバ/システム情報。先日、最新の185.85が出たばかりだ。ストリームプロセッサが216もある

 無事起動も確認し、これで環境も整い「いざTMPGEnc 4.0 XPressでCUDA体感!」と作業をはじめたところ……どうも調子が悪い。確かに今度はCPUにもCUDAにも数値が表示されCUDAが実際動いているのが分かる。ただCUDAの使用率が60%を超える辺りで「HDDからデータが読めません」とエラーになったり、PCがフリーズ/リブートしたりするのだ。「ドライバかアプリケーションのBUGかな!?」と思い、GeForceドライバやTMPGEnc 4.0 XPressのバージョンを下げても結果は同じ。原因を考えていた時「そう言えばGPUを交換してからパソコン起動時にBIOSがHDDを認識したりしなかったり」と言う、これまでには無かった現象があったのを思い出した。「もしかして!?」と、疑ったのが電源ユニットだった。

●電源ユニットの入れ替え

 パソコンに限らず電化製品は電源ON時、瞬間的に電気を食う。GTX 260はNVIDIAの推奨で「GTX 260:12V出力が36A以上ある500W電源ユニット以上」となっている。このパソコンに付いている電源ユニットはケースに付属していた「500W」。これが容量不足で作動が不安定になっているのではと。だとすればCUDA使用比率が60%を超えだすと駄目な理由も説明がつく。GPUが活発に動き出し消費電力が増え500Wの電源ユニットでは不足していると思われる。そこでたまたま必要も無いのに1,000Wの電源ユニットを搭載しているPCがあったので、それと入れ替えることにした。

 電源ユニット交換後チェック開始。起動時にHDDを認識するし、エンコードも正常に終了する。正解だった! やはり原因は電源ユニットのパワー不足だ。「500Wの電源ユニットだからギリギリ大丈夫だろう」と思っていたのが甘かった。これまであった不都合がピタリと収まり、ご機嫌に動くようになったのだ。

 ただ当初の目的は達成したものの、これだけ「エコ」が重要視される昨今、GPUのために電源ユニットを1,000W級にパワーアップしなければならないとは、明らかに時代に逆行していると思うのは筆者だけだろうか?

新旧電源ユニットの比較。上が今回使った1,000Wの電源ユニット、下が元々の電源ユニットだ。サイズも随分違うことが分かる組み込んだところ。CUDAを試すだけのつもりが、何やらとんでもない事になってしまった。電源とGPUでこれだけケースの中を占有する

 気を取り直してTMPGEnc 4.0 XPressを起動し、CUDAを有効化、一通りチェックしたところ意外な事実が判明した。それは筆者が試した範囲では「逆に少し遅くなる」のだ。エンコードの種類やフィルタの有無など、どれでやっても結果は同じ。少しでも速くなればとGTX 260を導入したため、ショッキングな内容だ。ただし、「CPU使用率は低くなる」。

CPUのみの処理時間CPUのみのタスクマネージャ/パフォーマンスCPU/CUDAでの処理時間

 テスト素材は以前、「DELL Studio One 19」の記事用に作った映像を使用。処理時間 01:01 vs 処理時間 01:08。CUDAを使った方が若干であるが遅くなる。使用したフィルタは、「インターレース解除」、「映像ノイズ除去」、「輪郭強調」、「色調補正」、「音声ノイズ除去」、「音声ボリューム調整」、「映像サイズ」。CPUとCUDAの使用率は約38% vs 62%。この結果はエンコードするフォーマットを変更しても同じ傾向だ。逆にCPUのみの時はタスクマネージャ/パフォーマンスを見れば分かるように4CPUとも、結構一杯一杯使用している。

 期待していたものとは違うが、この結果は逆にありがたい。もちろんフィルタ処理が速く終わった方がいいに決まっているものの、その間のCPU使用率はほぼ100%。同時に他の処理もできなくはないが、CPUパワーの取り合いとなり、全てが遅くなってしまう。「Core 2 Quad Q8200」級のPCを何台も所有していれば、専用マシンを作ればそれはそれ、他の処理は違うPCとなるが、なかなかそうも行かないのが現状だ。

 フィルタ処理している間に、写真を処理したり、メールやWeb、Officeを使ったり、動きがギクシャクすること無く効率良く1台のPCを使うには、CPUの使用率を下げる方が他の処理へCPUパワーを割り当てることができる。実際、先に述べた「バッチエンコード」を行ないながら他の仕事をしても何不自由なく普通にPCが操作できるため、これはこれで助かっている。

●「PowerDirector 7」を購入

 しばらくの間はインタビューの編集だけだったので、「TMPGEnc 4.0 XPress」で事は足りていたのが、少し慣れて来たところで次のミッションは「グラビア・アイドルの(簡易)イメージビデオの編集」となった。インタビューの編集とは違って、クリップの入れ替え、BGMを入れたり、エフェクトの追加、クリップ間のトランジションなど、もう流石に機能不足(と言うより、もともとのアプリケーションのコンセプトが違う)、別途動画編集ソフトが必要となる。機能的にはWindowsに付属する「Windows ムービー メーカー」程度でいいものの、CUDAには未対応。せっかくGTX 260を導入したのだからCUDA対応の動画編集ソフトにしたい。探したところサイバーリンクの「PowerDirector 7」を発見! お試し版で内容を確認し、使えそうだったのでオンライン版をぽちっとなした。

「PowerDirector 7」。大したことはやってないが、これが簡易イメージビデオの完成形。途中、BGMから音声に変わっている部分は撮影風景となっているGPUアクセラレーションのON/OFFできるパネル/環境設定。ビデオエフェクトにGPUが使われるようだが、具体的にどの機能なのかは解らない
GPUをON/OFFできるパネル。この「GPUハードウェアビデオエンコーダを有効にする」へのチェックは、Portable MPEG-4(MP4)とAVC MPEG-4(M2TS)の2つの出力形式のみチェック出来る。他のフォーマットではチェックボックスがグレーとなり選択できない自動シーン検出/クリップ分離。カットの始めや終わりは、空にカメラを向けたり、足元から入ったりと、大幅に映像が変わるため、比較的自動認識しやすいようだ。日頃使っている範囲ではうまく機能している

 「PowerDirector 7」がCUDAに対応しているのは、「ビデオエフェクト」と「Portable MPEG-4/AVC MPEG-4へのエンコード」この部分。筆者の使い方では前者のみの用途となる。CUDA目当てとしてはちょっと物足らないものの、現状は仕方ないと言ったところか。今回のシステムでは使えないが「ATI Stream」にも対応している。

 便利な機能としては「自動シーン検出/クリップ分離」が挙げられる。通常、イメージビデオの各クリップは、最後に「空抜け」したり被写体とは違う場所へカメラを動かし、そこで終わっているパターンが多い。もちろん本格的な撮影ならタイムコードで管理しているのだろうが、簡易撮影なので、そんな管理は行なっていない。従って通常はこれを目で追いながらカットして行くのだが、これが一番時間のかかる工程なのだ。その部分を完全ではないにしろ、自動的に分解してくれるので、それぞれ使うクリップの前後だけ調整すれば良く、非常に重宝している。

 ただし、出力であまり細かい設定ができないこともあり、いったんAVIファイルに吐き出し、TMPGEnc 4.0 XPressで指定の形式にエンコードしているのが今日時点のワークフローだ。

 さて、初めてイメージビデオを作ってみての感想は、「飽きさせずに3分程度の映像を作るのはなかなか大変」と言うことだ。これから少なくとも月に3~4本ペースで作るため、徐々に慣れて効率も良くなるだろう。


 今回「CUDAを骨までしゃぶり尽くした」わけでは無いので、また違う意見や結果もあると思うが、筆者が感じたのは「もっと積極的にCUDAを使って欲しい!」と言うことだ。

 例えば「TMPGEnc 4.0 XPress」では、システムを自動判断しCPUとCUDAの割当比をプログラムが管理、ユーザーが勝手にその比率を変えることができない。文中でも触れたように、時間はかかってもいいのでCPUの使用率を落としたいという用途もあるはずだ。また「PowerDirector 7」は「CUDA対応」と謳いながらも実際対応しているのは先に挙げた通り。イマイチ積極的に使っているとは思えない。オプション扱いの「Own Risk」でもいいので、もっとユーザーの自由にさせて欲しい感じがする。

 いずれにしてもGPUを替えることでこれだけの変化があった。「Core 2 Quad Q8200」と「NVIDIA GeForce GTX 260」と言う、動画編集をするにはそれなりの環境も整って満足。ここで気になるのは、CPU側をもっと強化するとどうなるか。機会があれば、価格も下がってきたCore i7ベースでシステムを組んで、CUDAとの比較を行なってみたい。

TMPGEnc 4.0 XPress/パフォーマンスの最適化。もちろん自動的に最適化はいいのだが、オプションで「任意の比率、もしくはCUDA優先」も欲しいところだ「Palit GeForce GTX 260 Sonic 216 SP(PCIExp 896MB)」。大迫力のビデオカード。ビデオカードに1万円以上使ったのは、10年以上ぶりだろうか(笑)