AviUtlを使ったMP4 (H.264) エンコード
目次
概要 †
ニコニコ動画の仕様 †
- 2008年03月05日から対応したH.264、当初はプレミアム会員のみH.264動画の投稿が可能でしたが、2008年7月5日より一般会員でも投稿できるようになりました。
- 正式なコンテナは「MPEG-4 Part 10 AVC」です。プロファイルはベースラインプロファイル、またはメインプロファイルが推奨です。
- 最大ファイルサイズは、プレミアム会員が100MB(104,857,600byte)、一般会員が40MB(41,943,040byte)です。(※ディスク上のサイズではなく、本サイズの数値ということに注意。)
- 最大許容ビットレートは、映像と音声の合計で、プレミアム会員が1049kbps、一般会員が656kbpsです。
- ββ(2008年12月12日)からの仕様変更により、プレミアム会員は最大ファイルサイズが40MB→100MB、最大平均ビットレートが828kbps→1049kbpsへと増加しました。
- エコノミーモードの発動条件は、ビットレート合計がプレミアム・一般共に約311kbps以上で、なおかつ再生数1000以上の場合です。(2008年12月25日時点)
- MP4コンテナには映像1チャンネル、音声1チャンネル【ステレオ/モノラル】のみ対応です。その他の映像・音声(副音声、サラウンドなど)の多重化は対象外です。
- 映像の解像度は4:3では512x384、16:9では512x288が表示の基本。800x600以内は問題ないのを確認。それを上回ると解像度制限に引っかかるようで、例えば800x640ではサーバサイドエンコードされてしまいます。
- 音声AACは以下の4種に対応しています。
- 「AAC-LC」(44.1kHz/48.0kHz・64kbps~320kbps推奨)
- 「HE-AAC」(44.1kHz/48.0kHz・32kbps~64kbps推奨)
- 「HE-AACv2」(44.1kHz/48.0kHz・16kbps~32kbps推奨)
- 「Q-Based AAC」(44.1kHz/48.0kHz・65^kbps~300^kbps推奨)
- オーディオ情報の無い動画はサーバサイドエンコードされます。無音の動画を作る際は無音の音声ファイルと合成させましょう。
- これらの仕様を満たさない場合は通常の動画として扱われ、通常のサーバサイドエンコードの対象となります。
- エンコードにあたっては「zoome Wiki Encode」も参考にして下さい。
AACの種類 †
AAC-LC、HE-AAC、HE-AACv2はABRに該当し、品質をコントロールし目的のビットレートに収めます。
- 「AAC-LC」は一般的にAACと呼ばれている物です。通常はこれを選びましょう。
- 高音質(低圧縮)。
- ジャズやクラシックなど、音に奥行きや深みがあり全体が落ち着いているBGM向き。
- およそ64kbps以下の低ビットレートには不向き。
- 「HE-AAC」(AAC-LCの高圧縮タイプ)は32~64kbps程度の低ビットレートで音の破綻を防ぐのに効果があります。
一方でそれ以上のビットレートを割り振っても、音質は上がりにくいという性質があります。
- サントラやアルバムなど、1つの動画で長い時間BGMが流れる動画向き。
- ポップ、ロック、トランス、演歌など、所々でテンポが変わるBGM向き。
- 長時間の動画でビットレートをあまり割り振れない場合。
- 短い再生時間の動画で、画質重視したい場合。
- 「HE-AACv2」(AAC-LCの超高圧縮タイプ)は16~32kbps程度の超低ビットレート時に用います。
- 実況プレイ動画や中継動画など、長時間の収録が必要な場合。
- 120分を超えるサントラやメドレーおよび作業用BGMなど、非常に長い動画を作成する場合。
- 極限まで画質に容量を割り振りたい場合。
- 古いラジオや単純な効果音など、元々低音質なものを軽く仕上げたい場合。
※低ビットレートでの特性(HE-AAC=aacPlus v1, HE-AACv2=aacPlus v2)
Q-Based AACはVBRにあたるものです。それぞれのフレームに必要なだけビットレートを割り振ります。
しかしVBR共通の欠点としてデータが偏るために、変換後のファイルサイズが不安定になったり、シークの反応が悪くなったり音ズレしやすくなるなど、問題を抱えやすくなります。
FLV4 (VP6+MP3) との違い †
- 基本的にはVP6より高速に圧縮できます。x264.exeはマルチスレッドに対応しているため、高性能なPCほどVP6との速度差が開きます。
- エンコードの際に上下反転するバグがないので、余計な手間がかかりません。
- 高度な動き検出やレート配分、Bフレームのおかげで動きが激しい動画でもVP6に比べて綺麗に圧縮できます。
- VP6よりデコード負荷が高いと言われています。特にCABACを有効にしたり、Bフレームを多用すると負荷が高くなります。
- 音声 (AAC) は特に低ビットレート(大体80kbps以下)においてMP3よりかなり綺麗に圧縮できます。160kbps以上のビットレートであれば著しい差は発生しませんが、概ねAACの方が良質です。
手順 †
1.準備 †
- AviUtl
ダウンロードしzipを展開。パスの都合上、C:やD:等、ドライブ直下にフォルダを置くことを推奨。
- 拡張 x264 出力(GUI)
H.264出力プラグイン。同封されている「readme.txt」を必ずよく読んでおくこと。ダウンロード先は
2.プログラム → 改造したソフト → x264 詰め合わせ → x264.○○○.rarの最新版
(更新頻度が高いソフトだが、基本的には最新版で良い)
解凍したら出てくる「auo」フォルダ内の「x264gui.auo」と「x264gui.ini」を、AviUtl.exeがある階層に入れる。
「Plugins」フォルダ等に入れても動かないようなので注意。
- Nero Digital Audio 1.3.3.0
音声のAACエンコードに必要。AAC-LC、HE-AAC、HE-AACv2およびQ-Based AACのエンコーダ。実際に必要なのは「neroAacEnc.exe」のみ。
入れる場所は自由だが、入れた場所は後に指定する必要があるので覚えておくこと。AviUtl.exeがある階層に入れると覚えやすいかもしれない。
※1.3.3.0から2passABRの挙動が変化(改善)しました。
参考…AviUtl用GPU対応プラグイン †
GPGPU。処理にGPUを使うことでCPUとの分散処理、時間短縮を実現します。
※GPU…PCのグラフィックボードに搭載されている、グラフィック処理に特化したCPU(と思えば差し支えないはず)。最近はGPUの高性能化により、CPU負荷が高くてもGPU負荷が低くてGPUの性能を持て余す状況・処理が増えているため、GPUに処理を分散させて有効活用しようというのがGPUプラグイン。ソフトウェア側の対応が必要。
(追加・増強お願いします)
2.リサイズと黒べた †
3.音声ビットレートと映像ビットレートの決定 †
音声ビットレートと映像ビットレートを決定する目安は、100MBと40MBで使用できるビットレート早見表や、次の「ビットレート設定 一覧表」や「ビットレート計算手順の例」を参照すれば、なんとなくつかめるはず。
なお、映像ビットレートを抑えるにあたって、ただの一枚絵や、動きの少ない紙芝居や画像のスライドショー等なら、映像30kbpsほどまで(あるいはもっと?)落としてもいけるらしいです。その分を音声に割り振れます。
逆に、音声ビットレートを抑えるにあたって、モノラル化は結構効果があります。音を左右に振る必要のない音源などは特に、128kbpsのステレオと64kbpsのモノラルがほぼ同じ音質になる(ジョイントステレオを考えなければ)ので、事前にWAVをモノラル化すれば音声ビットレートを約半分に抑えることができます。
また、サンプリング周波数の低周波化でもビットレートを抑えられます。WAVファイルの段階で、例えば48kHzを24kHzに、44.1kHzを22.05kHzに変換すれば、ビットレートを半分に減らせます。サンプリング周波数を低くするほど高周波成分が欠けるので、音楽もメインな動画では避けるべきですが、喋りは高周波成分が少ないので実況や語りがメインの動画ならあまり気にならないはず。但し変換は音声編集の最後にやりましょう。サンプリング周波数の異なるデータを繋げると再生速度が変わったり色々おかしくなりがちです。
ビットレート設定 一覧表 †
あくまでも一例ですので、必ずしもこの通りにやる必要はありませんが、参考程度にしておくとよいでしょう。
当たり前の事ですが、画質重視か音質重視かによって数値が異なりますし、フレーム数にもよります。
所要時間は目安です。お使いのPCスペックや設定により所要時間が大きく異なります。
※この表のビットレート割り当ては、一般会員で40MB上限近くまで使っての例です。
プレミアム会員で100MB使う場合は、おおよそ2.5倍の余裕があります。
再生時間 | AAC-LC | HE-AAC | エンコード 所要時間の目安 |
映像 | 音声 | 映像 | 音声 |
5分 | 330 | 320 | 590 | 64 | 30分 |
10分 | 320 | 192 | 480 | 64 | 1時間 |
15分 | 230 | 128 | 300 | 64 | 1時間30分 |
20分 | 170 | 96 | 200 | 64 | 2時間 |
25分 | 120 | 96 | 150 | 64 | 2時間30分 |
30分 | 115 | 64 | 125 | 56 | 3時間 |
| HE-AACv2 | HE-AAC | |
映像 | 音声 | 映像 | 音声 |
35分 | 120 | 32 | 105 | 48 | 3時間30分 |
40分 | 100 | 32 | 85 | 48 | 4時間 |
50分 | 85 | 24 | 65 | 40 | 5時間 |
60分 | 80 | 20 | 55 | 32 | 6時間 |
ビットレート計算手順の例 †
ビットレートの数字はあくまで一例です。
手順 | 一般会員 | プレミアム会員 |
1.作る動画の再生時間を調べ、秒に直します。 | (例として10分の場合) 10[分]→600[秒] |
2.ニコ動のファイルサイズ上限をkb(キロビット)に直します。 | 40[MB]×8×1024=327680[kb] | 100[MB]×8×1024=819200[kb] |
3.ファイルサイズを再生秒で割り、 おおよその最大ビットレートを求めます。 | 327680÷600=約546[kbps] | 819200÷600=約1365[kbps] |
4.ニコ動の最大ビットレート制限を越えないようにします。 (一般656[kbps]、プレミアム1049[kbps]) | 546[kbps] | 1365 → 1049[kbps] |
4.5.エコノミー回避優先の場合 そのビットレート制限(310[kbps])も越えないようにします。 | (エコノミー回避優先) 546 → 310[kbps] | 546[kbps] | (エコノミー回避優先) 1049 → 310[kbps] | 1049[kbps] |
5.設定の自由度が低い音声ビットレートを 先に決めます(目安:AAC-LC 96[kbps]でCD音質)。 | 96[kbps] | 96[kbps] | 96[kbps] | 192[kbps] |
6.最大ビットレートから設定した音声ビットレートを引き、 仮最大映像ビットレートを求めます。 | 214[kbps] | 450[kbps] | 214[kbps] | 857[kbps] |
7.ビットレートが設定通りにならないことがあるので、 少し減らして映像ビットレートを決めます。 | 214→ 205[kbps] | 450→ 440[kbps] | 214→ 205[kbps] | 857→ 840[kbps] |
当たり前の事ですが、ビットレートの数字はあくまで一例です。画質重視か音質重視かによっても数値が異なります。
4.バッチ登録 †
シングルパスとマルチパスがあります。
シングルパスでのエンコードの特徴 †
- シングルパスは、動画全体のビットレートの変動を詳細には調べず、エンコードを1回だけ行います。
- 画質や音質にこだわらず、エンコード時間をかけたくない場合はシングルパスで。
マルチパスでのエンコードの特徴(推奨) †
- 前パスでビットレートの変動を記録し、指定のビットレートに落とし込むためにマルチパスが必要となります。
- 2pass、または3pass以上とすることで、シングルパス以上の高画質が見込めます。
- なお、VP6でのマルチパスと違ってH.264では1stPassファイル自体は出力されません。最後の本番エンコードのみファイルが作成されます。
シングルパス・マルチパスでのエンコード †
- 初挑戦時は短時間の動画ファイルでの練習推奨! エンコード時間が長く(環境によって再生時間の数倍から10倍以上)かかるためです。長い動画の場合は編集ソフトで切り取るなどして、短いテスト動画を作ってテストしましょう。
- 一番初めは10~20秒の動画で、どんな手順でエンコードを行うかの確認だけ。画質の評価には短時間すぎて向きません。
- エンコードのテストとして、もし画質についても評価したければ1~2分以上の動画(3000フレーム以上の動画)が無難。
- 上下反転はしないで下さい。VP6では必要でしたが、このH.264では不要です。
- エンコードしたい動画の音声がMP3やWMAなどで圧縮されていると出力されない場合があるので、事前に外部(別のツールなど)でPCM-WAVの音声のみの別ファイルに変換して用意して下さい。
- エンコードしたい動画の音声がステレオで、これをモノラルで出力(AACエンコード)させたい場合も、事前に外部(別のツールなど)でモノラルのPCM-WAVの音声のみの別ファイルに変換して用意して下さい。
- AviUtlで、[ファイル] → [開く] でエンコードしたい動画を開きます。
※ 1.5.(上記のような事例に当てはまって、エンコードしたい動画の音声を外部でWAVファイルにして用意した場合)
[ファイル] → [音声読み込み] を選択し、用意したWAVファイルを開きます。
(これにより、エンコードしたい動画のMP3などの音声は使われず、「エンコードしたい動画の映像」と「用意したWAVの音声」がエンコード対象になります。)
- [ファイル] → [プラグイン出力] → [拡張x264出力(GUI)] を選択し、ファイル名を入力します。
- [ビデオ圧縮] ボタンを押すと【拡張x264出力(GUI)】ウィンドウが表示されます。メニューの [プリセット] から「NicoNico:超画質(超低速)」を呼び出し、以下の項目を設定しましょう。
※ここに記載されていない項目は、よくわからなければ無理に変更しないことをお薦めします。
逆に、項目について知りたい場合は拡張 x264 出力(GUI)の設定項目とその機能についても参考にして下さい。また、ニコニコ動画にアップされている各種H.264解説動画の設定ぶりを参考にするのもアリです。
| シングルパス用の設定 | マルチパス用の設定(推奨) |
音声 | エンコーダ | NeroAACエンコーダ |
neroAacEnc.exeの指定 | 右のボタンを押して「neroAacEnc.exe」を入れた場所を指定 |
エンコード設定 | 事前に決定した音声ビットレート(に近いもの)から好みで選択 AAC-LC (64kbps~320kbps) 高音質、標準 HE-AAC (32kbps~64kbps) 長時間向け HE-AACv2 (16kbps~32kbps) 低音質、超長時間向け (Q-Based AAC (65^kbps~300^kbps) VBRは 変換後のファイルサイズが不安定なので非推奨) |
2pass | オフ | オン |
処理モード | WAV |
ビットレート |
映像 | (ココ重要→) | シングルパス - 固定ビットレート | マルチパス - Nth PASS |
ビットレート | 事前に決定した映像ビットレートを指定 |
nul出力 | オフ | オン←ココ重要 |
自動マルチパス | | オン、数値は2~3推奨 (例:2を指定すると2pass。3を指定すると3pass。 3passだと2回nul+1出力の計3回エンコード) あまり多くても意味は無いうえ逆効果になることも。 |
レート設定 |
量子化の限度 | QPの下限 | ニコニコ動画では10程度が適当 |
シーンカット | IDRフレーム間隔の下限 | アニメなら1 その他は24や30など、フレームレート辺りが目安 |
IDRフレーム間隔の上限 | シーク間隔。VP6のMax Frames Btw Keys相当? 10秒ごとにシーク可能にするならfps×10を入力。 |
マクロブロック |
マクロブロックタイプの設定 | チェックボックス | 4x4, 4x8 and 8x4 Pフレーム動き補償以外すべてオン |
Bフレーム設定 | チェックボックス | すべてオン |
Bフレームの最大連続数 | 0~3 | 2~5~8 |
参照距離 | 1~3 | 2~4~6 |
大きいほど要超長時間で高画質 |
詳細 |
動き予測 | サブピクセル精度 | 6 | 9 |
※数値を上げるほど、高圧縮で高画質が期待できるが要長時間 例えば5から6にすると1割程度圧縮率向上 |
動き予測アルゴリズム | 静止画に近い動画なら「Diamond Search」 どっちつかずなら「Hexagonal Search」 動きが激しい動画なら「Uneven Multi-Hexagon」(umh) (下のものほど要長時間で高画質 残り2つ(esa,tesa)は余程の高性能CPUでもない限り非実用的) |
ベクトル探索範囲 (umh選択時) | 16 | 32,48,64 (大きいほど要長時間で高画質) |
彩度動き予測 | オン(ほとんど動きがない動画ならオフ) |
詳細設定 | スレッド数 | 0。使用CPUスレッド数。0で自動設定 |
ノイズ除去 | 素の動画が酷くない限り0でよい |
RD最適化 | NONE | All MB Encode |
ログ表示 | NONE |
チェックボックス | インターレース保持以外すべてオン |
デブロックフィルタ | 強度・閾値 | オン(0から-2程度。+方向には不要) |
その他 |
Adaptive Quantization | モード | アニメーションでは無効 |
Psy-RD | RDO | 実写系では0.50 アニメやCGでは0.00 |
拡張設定 |
拡張設定 | 初期Delayカット | オフ ※1 |
TimeScale4倍精度 | オフ ※1 |
ビデオ先読みスレッド | オン |
- ※1
拡張設定を使用する事によって、エコノミー時の画質が著しく低下する場合がある。
詳しくは下のMP4のエコノミー画質が著しく低下する例を参考に。
ただし、エコノミー回避できる条件(ビットレート等)を満たした動画を作成するならばオンでもよい。
- (画質劣化を妥協して)エンコード時間を抑えるコツ
- Bフレーム設定の参照距離の数値を下げる
- Bフレーム設定のBフレームの最大連続数を下げる
- ベクトル検索範囲の数値を下げる
- 動き予測アルゴリズムの精度を落とす
5.エンコードの開始 †
※エンコードが始まると時間がかかるので、出かける前や寝る前などに実行するのが良いでしょう。
- 上の表のように設定したら [バッチ登録] ボタンを押します。
※なお、ここで [バッチ登録] ボタンの代わりに [保存] ボタンを押すと、すぐにエンコードが始まりMP4が出力されます。次の手順の「バッチ出力終了時に」の機能が不要であればこちらで。
- [ファイル] → [バッチ出力] を開きます。任意で「バッチ出力終了時に」から [ウィンドウズをシャットダウン][AviUtlを終了] などを選択することもできます。
[開始] ボタンを押すとエンコードが始まりMP4が出力されます。
Tips †
H.264作成参考動画 †
H.264とFLV4 (VP6+MP3) の違いを検証した動画 †
AVI出力からの作成法 †
- プラグイン出力をうまく導入できない人がいるのでAVI出力からの動画作成方法を記載します。ただしAVI形式ではH.264は正式にサポートされていないので推奨はできません。
- 必要ソフトのダウンロード・インストール
- 動画のエンコード
aviutlを使ったVP6 2pass参照
コーデックがx264になっただけ。設定はプラグイン出力を参考に。
- AVI→MP4
MP4Boxを使ってMP4にする。
- 音声の変換と合成
別途SwitchなどでAACを作成してMP4Boxを使って動画と合成。
音声を後から合成する †
- まずWAVE出力を行う。
- Switch等使いWAVE→AACへ変換する。
- MP4BoxとYambを同じ場所に置き、Yambを使いMP4(またはAVI)とAACを合成する。
複数のmp4動画の結合・合成 †
- UniteMovieを使用することで、以下の動画を結合することができます。
- 同解像度
- 同ビットレート(動画のビットレートは多少違っても大丈夫の場合と、再生時にエラーが出る場合がある)
- 同fps(タイムスケール変更で対処可能?)
※結合に成功しても、必ずしも再生できるとは限りませんので注意!
- YambはMP4BoxのGUIフロントエンドですが、結合などの処理に関しては最低限のオプションしか使用できないので、コマンドラインを使える人はMP4Boxを使うことをお薦めします。
- 大抵の場合、映像と音声の尺は微妙に異なるため多くの動画を連結すると音ズレが発生します。
- infoオプションで映像と音の尺の違いを確認しましょう
- 入力の際に、:の後にdelay=***と書くことで任意のストリームを任意msだけ遅らせることができます。
MP4Boxの概要 †
mp4box [入力...] 出力
入力 ::= (-cat|-add) 入力1[#ストリーム][:オプション...] (-cat|-add) 入力2[#ストリーム][:オプション...] ...
mp4box -info 情報が欲しいmp4ファイル
- 入力されたストリームを、全て結合して出力します。
- mp4ファイルは内部にストリームと呼ばれる単位で別個のデータを保存しています。
- ストリーム1は映像、2が音声。 大体は。 それ以外のものが入っているとニコニコに弾かれる(?)
- 詳しくは-infoオプションを使って見てみましょう。
- それぞれの入力の前に"-cat"とつけるか"-add"とつけるかで、挙動が異なります。
- addなら新しくストリームを0:00から始めます
- catなら既に存在する同種のストリームのお尻に連結します
- #によるストリーム指定は任意です。 "#video"または"#audio"のどちらか。
- :を使っていくつかのストリーム入力オプションを指定することができます。 オプションの度に:を書きます。
- 出力先のファイルがすでに存在していた場合上書きでなく追加を行なうので注意してください。
音声だけで映像が無いファイルが出来る問題について †
- x264gui.auoの最新版を導入すればたぶん回避できます。
- 他の回避方法
- 1stPASSで「nul出力」をオン、2ndPASSで「nul出力」をオフにする。
- それでもダメなら1stPASS終了後にAviutlを再起動してから2ndPASSをする。
(1stPASSだけバッチ登録→バッチ出力→2ndPASSをバッチ登録→Aviutl再起動→バッチ出力)
- QuickTimePlayerで再生してませんか?
出力した.mp4ファイルを再びAviutlで開いてみるか、MediaPlayerClassic?やGomplayer等で再生してみると上手くいってるかもしれません。
MP4のエコノミー画質が著しく低下する例 †
MP4で800kbps(または600kbps)、29.97fpsの動画をアップロードした際に、エコノミー時の動画が59kbps、119.880fpsとなる場合がある。
これは上記のビットレートとフレームレートでアップロードした場合の、一般的なエコノミー動画よりも、ビットレートが約4分の1でフレームレートが約4倍になっている為に、画質が悪く音ズレなども引き起こす、非常にやっかいな不具合である。
アップロードされた動画はsmilevideoによってエコノミー時の動画が自動的に生成される為に、smilevideo側に問題があると思われているが、詳細は不明。
元のMP4のサイズが512*384、29.97fpsの動画にこのバグが起こりやすいが、まれに24fpsの動画でも同様の症状が確認されている。
原因は不明。「可変フレームレート」周りともいわれたが現在は不具合は無くなった模様?
x264の初期Delayカット、TimeScale4倍精度等の拡張設定を使用する事によって、この不具合が起こる可能性がある。
したがってこれらの拡張設定は使わないほうがいいかと思われる。
エンコしている環境にも依存しそうな問題なので、どうしても使いたい場合は1度アップロードテストをしてエコノミー時の画質を確認しておいた方がいい(動画のURL末尾に「?eco=1」を加えると強制エコノミーモード再生が可能)。
最後は余談になるが「MP4はエコノミーの動画がひどい」と言われているのは、おそらくこの不具合の影響だと思われる。
本来のエコノミー動画は、flvもmp4もあまり変わらないように設定されている。
参考:エコノミー動画が著しく酷くなった原因について http://valencia1094.blog28.fc2.com/blog-entry-27.html
低スペックPCユーザーのために動画再生時の負荷を小さくしたい場合 †
※注意! 再生負荷を下げる程、画質も低下します
BaselineProfile?(Bフレーム無効・CABAC無効)にするとVP6並の負荷になる。
ただし圧縮効率(画質)も下がるので、どちらか一方は有効にするとバランスが良いかも。
どちらを無効にした方が良いかは映像の内容によって異なるので、自分でテストしてみる。
fpsは高いとその分デコード負担が増える(60fpsなら30fpsの倍かかると思ってもいい)。
解像度が大きい程デコード負荷が増える(512x288より512x384の方が負荷が大きい)。
よって512x288動画を黒べたで512x384にすると無駄な負荷増になるので注意。
ビットレートと動画サイズを比較すると動画サイズ大の方が再生負荷が大きいとの報告もある。
おまけ・プレイヤーの「コメントを自動受信する」にチェックが入ってた場合、オフにすると再生負荷減。
参考
拡張 x264 出力(GUI)の設定項目とその機能について
デコード負荷の軽減
x264 デコード負荷を軽減するために
x264 ニコニコ動画 1Mbps の影響
コメント †