2016年8月30日火曜日

高画質動画作成方法

動画を高画質にする為のノウハウを纏めます。


YouTubeに投稿した動画の説明欄に簡単な説明をしていますので、
見て無い方はまずこちらの動画の"解説欄"を見て下さい。



以下の3部構成で動画の高画質化について説明します。


1. ソースの質
2. 解像度
3. エンコード



1. ソースの質

PCの3Dアプリケーション(ゲーム含む)の場合
まずは3Dアプリ自身の画質を上げましょう。
3Dアプリに画質設定が無いまたは少ない場合は、グラフィックドライバの設定を弄ります。


アンチエイリアス
斜めの直線画に発生するギザギザを抑制します。
デメリットとしては映像がぼやけ画質が落ちます。
Radeonの場合だと適応型マルチサンプリングがお勧めです。
適応型なので必要な箇所だけアンチエイリアスを掛けます。

形態学的フィルタリング(Radeon)
FXAA(GeForce)
これもアンチエイリアスの一種です、画面全体がぼやけるので選択しないで下さい。

異方性フィルタリング
背景の画質が上がるので最高設定にして下さい。

テクスチャ フィルタリング
パフォーマンスより画質重視にして下さい。

表面フォーマット最適化(Radeon)
オフにして下さい。

最大テレーションレベル
最高設定にして下さい。


画像で見たほうがわかりやすいと思うので貼り付けて起きます。
Radeonのゲーム設定




私はGeForceを使用したことが無いので最適な設定がわかりません。
2016年末にGTX1070買うかも。


こちらの方がGeForceのドライバ設定をわかりやすく説明してくれてます。
是非参考にして下さい。↓ Radeon設定の説明もあります。
http://whitacirno.blog45.fc2.com/blog-entry-312.html


このグラフィックドライバの設定は全ての3Dアプリ(ゲーム含む)に適応されるので注意が必要です。
3Dアプリ側で高画質設定をやるとアンチエイリアス等が重ね掛けになることがあります。
不要な時は設定を元に戻して起きましょう。

元の設定を忘れた場合はリセットして下さい。



※備考
東方星蓮船はRadeonだと船の影が白くなるバグがあります。
VsyncPatch_rev7というツールでバグ修正が出来ます。

古いRadeon所持の方は東方神霊廟でアンチエイリアスは掛けないで下さい。
トランス時の背景が戻らないバグがあります。


次に3Dアプリ専用キャプチャソフトと可逆圧縮コーデックを用意します。
有料キャプチャソフトならDxtory、無料ならアマレコ・ライト等あります。
可逆圧縮コーデックは無料のUtVideoがお勧めです。
UtVideoのYUV420 BT.709 VCMがお勧めです。
RGBやYUV422にしても再生出来る機器はほぼ無いし、動画投稿サイトが対応してるのはYUV420のみです。YUV420にしておきましょう。


デスクトップ画面やブラウザゲームを録画する場合は、アマレコTVというキャプチャソフトがお勧めです。


※備考
アマレコ・ライトは無料ですが、有料アプリのAMVコーデックが必須になります。
AMVコーデックは無料のまま試用が可能です。ただしロゴは入ります。

アマレコ・ライトとAMVコーデックをインストールして、録画に使うコーデックを
AMV以外にすると、アマレコ・ライトをロゴ無しで使えます。

無料のキャプチャソフトは色々あるので、自分で探してみるのも良いです。



ゲーム機の場合
ゲームソフトとゲーム機の両方を高画質に設定しておきましょう。

録画にはキャプチャーカードまたは、キャプチャーユニットという機材が必要になります。
ゲーム機に対応してない機材も多いので、購入する前にちゃん録画出来るか調べましょう。
キャプチャー機材にはソフトウェアエンコードと、ハードウェアエンコードタイプがあります。

ソフトウェアタイプはコーデックを自由に選べるタイプが多いです。画質に置いて有利となる可逆圧縮コーデックを選択出来るメリットがあります。
デメリットは可逆圧縮コーデックならファイルサイズがでかく、録画時にHDDへの転送が追いつかなくドロップする可能性があります。かと言って不可逆圧縮コーデックを選ぶと、CPUへの負荷が高くなるし画質も落ちます。


ハードウェアタイプはH.264等のコーデックがメインとなります。録画時のCPU負荷がほぼ無く不可逆圧縮なのでファイル容量が少なくなるメリットがあります。
デメリットは不可逆圧縮なので画質面で劣ります。

可逆圧縮コーデックで録画する場合はYUV420を選択してください。
RGBやYUV422にするとファイルサイズがでかくなり、HDDの転送が追いつかなくドロップする可能性が上がります。
それでもドロップする場合は、HDDのRAID0やSSDの導入も検討しましょう。


ゲーム機のキャプチャはやったことないのでこれ以上説明できません。ごめんなさい。


実写の場合
品質の良いカメラを用意し撮影テクニックを磨いて下さい。
こちらの知識は皆無なので説明出来ないです。
ごめんなさいごめんなさい。



2. 解像度

NNEDI3という機能でアップコンバート(アップスケーリング)を行います。
低解像度のソース程絶大な効果が得られるでしょう。

NNEDI3でアップコンバートを使うメリットは2つあります。
1つ目は品質の低いアップコンバートを扱うモニタやTVに処理させないという事です。
2つ目はYouTube限定ですが高解像度にすると、多くのビットレートが割り当てられるという事です。

高価なPCモニタやTVでNNEDI3程高度なアップコンバートは出来ません。
リアルタイムでNNEDI3を処理する機器は現在PCしかありません。
PCに高価なグラフィックボードでも積まない限り無理です。

つまり再生機器がリアルタイムでアップコンバートしないで良いように、最初からアップコンバートされた動画を用意するのが一番です。

動画の変換ならリアルタイムでやる必要は無いので、スペックが低くても大丈夫です。


まずは目標解像度を決めましょう。
3840x2160(4k)までなら再生出来る機器は多いでしょう、それを超えてしまうと途端に再生互換性が落ちます。試しにYouTubeに5120x3840の動画を投稿してみましたが、480x360でしか再生出来ませんでした。3840x2160に抑えて置くのが無難です。

お勧め解像度はこちらです。

アスペクト比 16:9
3840x2160   2560x1440   1920x1080

アスペクト比 4:3
2880x2160   1920x1440   1440x1080

一番のお勧めは3840x2160と2880x2160ですが、処理に時間が掛かるので強くはお勧めしません。
最低でも1920x1080や1440x1080にはしておきましょう。


では実際の使い方を説明します。

NNEDI3という機能はAviutlとAvisynthのプラグインという形で提供されてます。
Aviutlで説明します。

プラグインを導入したらこちらを選択します



「拡大フィルタとして使用」と右上のボックスにチェックを入れます。
残りのボックスはチェックを外して起きましょう。
拡大設定はrfactorになります。



rfactorは0~4段階あり、縦横1辺で1倍2倍・4倍・8倍・16倍となります。
画素数(面積)計算だと1倍・4倍・16倍・64倍・256倍となります。

NNEDI3は解像度を自由に設定出来ないのがデメリットです。
なので1回目はNNEDI3で目標解像度に近付けて、2回目の処理で目標解像度に調整するという手順になります。


上のYouTubeの動画作成時の手順を例にするとこんな感じです。

1. 640x480の解像度をNNEDI3で、rfactor3に設定し5120x3840にアップコンバート
2. リサイズフィルタ(Nilposoft作)のSpline36で、2880x2160へダウンコンバート

1回目の処理では25分の動画を、UtVideoのYUV420 BT.709のコーデックでエンコードして、48時間経過しました。ファイルサイズは約700GBです。
48時間も掛かった理由はファイルサイズがでかすぎて、HDDへのデータ転送に負荷が掛かった為です。x264でエンコードしてたらまだましだったかもです。

CPUの性能に自信が無く、HDDの性能に自信があるのなら、UtVideoのYUV420 BT.709でエンコードすると良いです。逆にCPUの性能に自信があり、HDDの性能に自信が無いならx264でエンコードしましょう。

48時間もエンコードするの?丸2日間PC使えないのは無理!
何て思うかも知れませんが、Aviutlの優先度設定を「Lowest」にすると、PCの通常処理がAviutlのせいで重くなることは無くなります。エンコードしてる事にも気付かない位です。




ただしUtVideoのYUV420 BT.709のコーデックでエンコードしてると、そのファイルを保存してるHDDに凄い負荷が掛るのは防げません。その場合はCドライブに保存するのは辞めて起きましょう。

1回目の処理のアップコンバートが終わったら、次はダウンコンバートで調整します。
ダウンコンバートの処理は特に重要では無いのでどの機能でも良いです。
今回はリサイズフィルタ(Nilposoft作)で説明します。

まずはこちらを選択します。



次に右上のボックスにチェックを入れ、追加ボタンを押します。
任意の解像度を入力し下さい。



解像度の設定が終わったら仕上げのエンコードを行います。


※備考
1回目のアップコンバート処理をUtVideoのYUV420 BT.709ではなく、x264でエンコードした場合の説明をします。

最終的な目標解像度は2880x2160です、1回目の処理で5120x3840までアップコンバートされます。画素数(面積)計算だと3.16倍の差があります。

x264でエンコードする場合のビットレートは、最終目標2880x2160のビットレートを68Mbpsとするなら、その3.16倍の214Mbpsにする必要があります。解像度が違うのに、同じビットレートにすると画質が劣化するので注意が必要です。

かなり過剰な設定かと思いますが、まあ良いでしょう。


3. エンコード

エンコードの設定は目的に応じて決めましょう。
設定次第で再生互換性が決まるので重要です。
今回YouTubeに投稿した動画の設定で説明します。

まずはYouTubeの推奨設定をご覧下さい。(この通りの設定じゃなくても投稿出来ました)
https://support.google.com/youtube/answer/1722171?hl=ja

ビットレートは2160p(4k)の設定で68Mbpsとあるのでこちらに設定します。

仕上げのエンコードは「x264guiEx」という非常に素晴らしいアプリで行います。
YouTubeへの投稿だと適当な設定でも大丈夫ですが、念の為に投稿出来た自分の設定を貼っておきます。この設定で投稿出来なかったら解像度や他に問題があるはずです。




物凄く重い設定になってます、正直ここまでやる必要は無いと思います。


エンコード中にAviutlが落ちる問題について
Aviutlが落ちる原因は大抵メモリ不足です、設定を見直す必要があります。
5120x3840の解像度でエンコードしてればメモリ不足になって当然です。

Aviutlのシステム設定を選択します。



最大画像サイズと最大フレーム数は必要な数だけに設定します。
キャッシュフレーム数を4にしてますが、余り意味が無いかも。
「LargeAddressAware」にチェックを入れます。Aviutlが使用出来るメモリが増えます。



設定を見直しても落ちる事はあります、実際に何度も落ちました。
落ちた原因はメモリではなく、CPUの発熱の可能性も考えられます。

落ちるのを前提にエンコード設定をします。
動画の出力を分割し最後に結合する方法があります。

1つの動画を幾つかに分割にするとエンコード中にAviutlが落ちても、
途中のファイルから再開出来るメリットがあります。


出力の分割
分割出力方法を説明します。
分割したファイルを結合するには全く同じコーデックかつ、
エンコード設定が同じで無いと出来ません。


まずは任意の場所、出来れば無音部分の場所を区切りに設定します。




出力方法は「バッチ登録」が便利です。



分割箇所全ての出力設定を終えたら、ファイルメニューの「バッチ出力」を選択します。



バッチ出力リストにて「開始」を押すとエンコードが始まります。
バッチ出力終了時の動作は好みで入れましょう。



動画ファイルの結合
結合方法を説明します。

まずはAviutlに結合する先頭のファイルを読み込ませます。

次にファイルメニューの「追加読み込み」を選択します。



そして次の結合ファイルを読み込ませます。



同じ要領で全てのファイルを読み込みます。

そして出力するにはファイルメニューのエクスポートから、任意のプラグインを選択します。
「L-SMASH Works Muxer」「MP4 Export」どちらのプラグインでも出力可能です。
今回は「L-SMASH Works Muxer」で説明します。




Muxを選択します。



最後に任意の名前を入れて保存して下さい。
これで結合は完了です。


これで終われば完了なのですが、私の環境では問題が出ました。
動画を結合した部分で音ズレが発生したのです。
ほんの数フレーム程度なので、気にならない人は気になりません。

ですが私は気にする人なので音ズレが起きない結合方法を調べました。
調べて試した結果全滅でした。環境依存なのかも知れません。

最終手段ということで、動画で無音のシーンを分割箇所に設定しました。
無音のシーンなので音がズレてもわかりません。


長々となりましたがこれで動画の高画質化方法の説明は終わりです。
とても長いので作業中に見ると良いかもです。
修正や追加があればこっそりやるかも。

ではお疲れ様でした~。



4. おまけ

YouTubeへのアップロードについて。
動画をアップロードすると、サーバーが低解像度から順次エンコードしていきます。
ちゃんと設定したのに2160p60 4Kにならないぞ?と焦るかもですが、
最高解像度のエンコードは最後になるので1晩待つ必要があります。
焦らずに気長に待ちましょう。

今回画質テストするきっかけはニコニコ動画の「1.5GBで動画投稿出来る様になった」
というアップデートが原因です。でも実際は「1.5GBまでアップロードできるが、100MBに必ず圧縮するぞ」という内容に絶望してYouTubeに切り替えた訳です。


今度こそさよならです。(^q^) ばいばーい。