※今回紹介する方法は、このブログを書いた時点でのYouTubeの仕様の話となります。YouTubeは突然仕様が変わることがありますので将来仕様が変わった際、ここに書いた事が通用しなくなる可能性もありますのでご注意下さい。
現在動画共有サイトを運営しているサイトはいくつかありますが、その中でも最大手なのはやっぱりYouTube。YouTubeのアカウント(Googleアカウント)を取得して、そこに動画を投稿している友人も多く、私自身もサーキットの車載動画やゲームのプレイ動画をYouTubeにいくつか投稿しています。YouTubeに投稿後の動画の中には明らかに画質が悪く、アップロードした元の動画ファイルは綺麗なのになぜだろうと首を傾げた事がある人も少なくないと思います。そこで今回はYouTubeに高画質でアップロードする為のちょっとしたコツのひとつを紹介したいと思います。
ニコニコ動画やzoomeだと各サイトで決められたエンコード条件(ビットレート、画面サイズなど)をクリアすれば、サーバーで再エンコードされること無くオリジナルの画質のままアップロード可能なのですが、YouTubeだと強制的にサーバー再エンコードされてしまうので、オリジナルよりも画質が低下してしまうのはどうやっても避けられません。なので、如何にサーバー再エンコード後の画質低下を最小限に抑えるかが今回のポイントとなります。ここでキーとなるのが動画ファイルの解像度です。
東方Projectのウィンドウモードでの解像度は640x480(画面アスペクト比4:3)。この解像度のままYouTubeにアップロードしてしまうと、いくらビットレートが高くてもSD(Standard Density:標準解像度)と判断されて480pモードまでしか選択できなくなり、再エンコード後のビットレートが少ししか割り当てられなくなって画質が大きく落ちます。
これを回避するにはアップロードした動画がHD(High Density:高解像度)とYouTubeに判断させて、720p以上のモードを選べるようにする必要があります。720pなら再エンコードのビットレートがSDの動画よりも多く割り当てられるので画質の低下は抑えられます。これが今回紹介するYouTubeで高画質でアップロードできるコツとなります。
では、どうやったらYouTubeにHDと判断させるかというと、アップロードする動画の縦の解像度を720以上にします。するとHDマークがついて720pが選択可能になります。もちろん画面アスペクト比を維持するために横の解像度も変更する必要があるので720pを例に挙げると、画面アスペクト比が4:3の動画なら960x720、16:9なら1280x720の解像度となります。この解像度は正方形ピクセル(ピクセル縦横比1.0)での話なので、720x480など長方形ピクセルでキャプチャないし録画したファイルを扱う場合には注意が必要です。アスペクト比・ピクセル比についてはこちらのページを参照。
http://tmpgenc.pegasys-inc.com/ja/support/labo/AspectRatio.html
文章だけだと画質の違いが伝わらないので、エンコード条件は同じで解像度のみ違うサンプルファイルを二つ用意しまして、それをYouTubeにアップロードした動画で二つの動画の画質の違いを目で見てもらいます。エンコード条件ですが、
・使用エンコーダ:AviUtl 0.99i8
・拡張 x264 出力(GUI)プラグイン
・Lanczos 3-lobed 拡大縮小フィルタ
・映像:H.264 2Pass-VBR 5000kbps
・音声:AAC-LC 44.1kHz 256kbps
・mp4コンテナファイル
エンコードした二つの動画ファイルの詳細を真空波動研を使って調査した結果、
[960x720.mp4]
解像度:960x720
映像:5006.40kb/s
音声:260.81kb/s
ファイルサイズ:16.46MB
真空波動研Lite 110406 / DLL 110406 Unicode
[640x480.mp4]
解像度:640x480
映像:5009.20kb/s
音声:260.81kb/s
ファイルサイズ:16.47MB
解像度以外はほぼ同じとなって比較対象の動画としてバッチリです。この二つの動画ファイルをYouTubeにアップロードしたものがこちら。YouTube上で再生している動画のスクリーンショットの貼り付けと、YouTubeにアップした動画をダウンロード(Craving Explorerを使用)したファイルの詳細も一緒に記載します。
■キャプチャ動画.avi(Display2AVIにてRushコーデックを使い、640x480でキャプチャし、AviUtl上で読み込ませた画面)
■960x720.mp4
VIDEO
http://www.youtube.com/watch?v=viC07O5C4CI
[エンコードテスト 960x720.mp4]
960x720 8Bit AVC/H.264 High@3.1 Unspecified 30.00fps 783f
2992.21kb/s
AAC 44.10kHz 2.0ch(2/0 L+R) LC 152.20kb/s
[Extra][2]
MP4 v2
MetaData
[MPEG4] 00:00:26.100 (26.100sec) / 10,279,374Bytes
真空波動研Lite 110406 / DLL 110406 Unicode
■640x480.mp4
VIDEO
http://www.youtube.com/watch?v=qcuz2sHg6nc
[エンコードテスト 640x480.flv]
640x480 AVC/H.264 Main@3 30.00fps
1142.16kb/s
AAC 44.10kHz 16Bit 2ch 129.03kb/s
[FlashVideo] 00:00:26.067 (26.067sec) / 4,170,908Bytes
真空波動研Lite 110406 / DLL 110406 Unicode
上記を見比べれば画質の違いは一目瞭然。動画の一部分をズームした画像を見比べると、640x480.flvの方は文字の輪郭の周辺にビットレート不足によるモスキートノイズが顕著に現れ、文字や数字が潰れてしまって一部判別できません。そして、YouTubeからダウンロードしたファイルの詳細に注目してください。
[エンコードテスト 960x720.mp4]
mp4コンテナファイル
解像度:960x720
映像ビットレート:AVC/H.264 2992.21kb/s
音声ビットレート:AAC 152.20kb/s
ファイルサイズ:9.80MB
[エンコードテスト 640x480.flv]
flvコンテナファイル
解像度:640x480
映像ビットレート:AVC/H.264 1142.16kb/s
音声ビットレート:AAC 129.03kb/s
ファイルサイズ:3.98MB
640x480.flvは、元の映像ビットレートの5000kbpsから1142kbpsと大きくダウン。両者に割り当てられた映像ビットレートの差が3倍近くもある結果となりました。そして、960x720.mp4の方は解像度がそのまま960x720と640x480よりも高解像度です。この二つの要因が画質を大きく左右しています。
ちなみに、解像度960x720でもっと映像ビットレートを高くした動画をYouTubeに投稿したら、再エンコード後のビットレートも高くなるのではと思って10000kbps(10Mbps)でエンコードしてYouTubeにアップロード。それをダウンロードしてファイル詳細を調べたら映像ビットレートは3000kbpsで、960x720の5000kbpsで投稿した動画とほぼ同じでした。アップロードした動画の解像度でYouTube再エンコード時に割り振るビットレートを決めているようです。3000kbpsではビットレートが足りないと言う人は、画面アスペクト比が4:3の動画なら1440x1080、16:9なら1920x1080にした動画をアップロードすると1080pが選択可能になるので、より多くのビットレートが割り当てられます。では、実際に1440x1080の解像度で、映像:H.264 2Pass-VBR 10000kbps(10Mbps)に設定してエンコードして、YouTubeにアップロードしました。すると、
■1440x1080.mp4
VIDEO
http://www.youtube.com/watch?v=fYWcN5FRoHg
[エンコードテスト 1440x1080.mp4]
1440x1080 8Bit AVC/H.264 High@4 Unspecified 30.00fps 783f
6008.43kb/s
AAC 44.10kHz 2.0ch(2/0 L+R) LC 152.20kb/s
[Extra][2]
MP4 v2
MetaData
[MPEG4] 00:00:26.100 (26.100sec) / 20,119,819Bytes
真空波動研Lite 110406 / DLL 110406 Unicode
[エンコードテスト 1440x1080.mp4]
mp4コンテナファイル
解像度:1440x1080
映像ビットレート:AVC/H.264 6008.43kb/s
音声ビットレート:AAC 152.20kb/s
ファイルサイズ:19.19MB
モスキートノイズは960x720の解像度で投稿した動画よりも軽減されていて、文字の輪郭がさらにはっきりくっきり映るようになりました。そして、再生解像度が960x720から1440x1080になり、映像ビットレートが2倍の6000kbpsになったのがとても大きく、かなり高画質になりました。しかしその反面、動画ファイルの再生が重くなりました。
以上の結果から、高画質でYouTubeに投稿する際には元の動画を高解像度にする必要性がお分かり頂けたかと思います。では、ウィンドウモードだと解像度が640x480のゲームのプレイ動画や、HDに対応していないデジカメやビデオカメラでの動画では高画質でYouTubeに投稿できないのかという疑問が発生します。
東方Projectのゲームの中には東方地霊殿みたいに環境設定で640x480よりも高解像度を選べる作品がありますし、選べない作品についてはVパッチを当ててコンフィグを書き換えればウィンドウモードでの解像度を自由に変更できます。しかし、ウィンドウモードの解像度を高くすればそれだけCPUの負荷率が上がる事になります。
OS:WinXP SP2、CPU:Core 2 Duo E8400(3.00GHz)、メモリ:4GBの自作パソコンを使い、キャプチャーソフト:Display2AVI 1.1.0、キャプチャーコーデック:同ソフト付属のRUnlength Sato Huffman (RuSH)で、640x480のゲーム画面を60fpsでキャプチャーしているのですが、一度1280x960のウィンドウモードに変更してキャプチャーしたところ、キャプチャー直後からドロップフレームが発生してしまい、コマ落ちの嵐でまともにキャプチャーできませんでした。この対策としては、フレームレートを60fpsから30fpsに落としたり、別のキャプチャーソフトやコーデックを検討したり、ハイパワーなCore i7や、高速転送可能なストレージ(SSDなど)が必要になってきます。
フレームレートの話が出ましたが、現在のYouTubeの仕様では60fpsでアップロードしても強制的に30fpsに落とされてしまいます。TVの番組やビデオカメラでは30fpsがデフォルトですが、1フレーム=1/60秒を基本とするゲームでは30fpsだと問題が出てきます。特に動きが激しいシューティングゲームでは、30fpsと60fpsの差が顕著です。60fpsに対応しているzoome(もうすぐサービス終了)でその差を検証します。
30fps
http://zoome.jp/rayieza/diary/2
60fps
http://zoome.jp/rayieza/diary/1
60fpsの方が弾の動きが滑らかで弾速も速く見えますよね?こちらの方が実際のゲーム画面(60fps)に近い動画となります。映像ビットレートが1400kbpsの割には画質が綺麗なのは、zoomeのサーバー再エンコード条件を回避しているので、オリジナルの画質のままアップロードできているからです。
話を戻します。今回キャプチャーした元データですが、ウィンドウモードの640x480をそのまま640x480の60fpsでキャプチャーしています。キャプチャー動画ファイルの詳細はこちら。
[キャプチャー.avi]
640x480 32Bit RushCodec 60.00fps 1961f 258198.53kb/s
PCM 44.10kHz 16Bit 2ch 1411.20kb/s
[RIFF(AVI1.0)] 00:00:32.683 (32.683sec) / 1,060,665,474Bytes
真空波動研Lite 110406 / DLL 110406 Unicode
カット前なので32秒ありますが、それでもファイル容量が約1GB。
10分で20GB の計算です。動画編集し始めると、HDDの残り容量はあっという間に無くなっていきます。こまめに作業ファイルや元ファイルを削除しましょう。
では今回どうやって640x480のキャプチャー動画をエンコードして960x720や1440x1080の解像度にしたかというと、AviUtlにLanczos 3-lobed 拡大縮小フィルタのプラグインを入れ、これを使って解像度を上げています。静止画も動画も元ファイルよりも解像度を大きくするとボケてしまって画質低下の要因になるので、高画質を求めるならご法度なのですが、拡大による画質の低下よりも、YouTube側で高解像度判定されてたくさんのビットレートを割り振られる事による画質の向上の方が大きいのです。それは、今回見て頂いた動画で明らかです。HDに対応していないデジカメやビデオカメラの動画も同様の手順で対応できますが、テレビやビデオカメラなどの民生用の機器を使う場合にはインターレースの解除が必要になりますので注意が必要です。
以上まとめると、
・YouTubeではサーバー再エンコードが回避不可能
・YouTubeに高画質でアップするには高解像度(HD)の動画ファイルが必要
・標準解像度(SD)の動画は編集ソフトで解像度を拡大して出力する
・画面アスペクト比4:3なら解像度は、960x720(720p)、1440x1080(1080p)
・画面アスペクト比16:9なら解像度は、1280x720(720p)、1920x1080(1080p)
・480pなら再エンコードの映像ビットレートは約1000kbps、720pなら約3000kbps、1080pなら約6000kpsが割り当てられる
・YouTubeでは60fpsでアップロードしても強制的に30fpsに落とされる
以上です。これで少しでもYouTubeに高画質でアップロードできる人が増えたらいいなと思います。長くなりましたが、ご視聴ありがとうございました。
フォトギャラリー
https://minkara.carview.co.jp/userid/507493/car/488014/2713261/photo.aspx