前回の日記の続きです。今回は、音ズレの原因その5として、「音声エンコーダの遅延問題(エンコーダディレイ)」について解説します。
https://minkara.carview.co.jp/userid/507493/blog/34477303/
■拡張x264出力(GUI)Exを使う上での注意点
「AviUtl」の標準の状態では「AVI形式」でしか出力(エンコード)できませんが、別途出力プラグインを入れる事によって、「AVI形式」以外のコンテナで出力が可能になります。「MP4形式」のコンテナで出力できる
rigaya氏制作の拡張x264出力(GUI)Ex「x264guiEx」が有名でして、利用しているユーザーはかなり多いです。
この出力プラグインを使って「MP4形式」で保存を選択すると、映像をH.264コーデック、音声をAACコーデック(NeroAacEncを利用)でそれぞれエンコードした後に、映像と音声を「L-SMASH」でmux処理して「MP4形式」のコンテナで出力という自動処理を行いますが、作成された動画の音声が若干遅れてしまい「音ズレ」が発生してしまいます。
以前、FF5r(改造版FF5)のプレイ動画を「AviUtl」で編集した後に、seraphy氏作成の拡張x264出力(GUI)の出力プラグインを使って「MP4」コンテナ形式にエンコードしてYouTubeにアップした事がありますが、音声が若干遅れて「音ズレ」しているのを確認しています。カーソルの移動音、ウインドウが開いた時の音、攻撃した時の打撃音に注視すれば、それが確認できます。
https://www.youtube.com/playlist?list=PLPPe3sIoiuGE-FVA-40TYXb_L84X0QPLA
これは、NeroAacEnc等で圧縮音声エンコードを行うと、一定の遅延が発生する
「音声エンコーダの遅延問題」(エンコーダディレイ)と呼ばれる物です。
http://looooooooop.blog35.fc2.com/blog-entry-1094.html
■エンコーダディレイの解決方法
エンコーダディレイによる「音ズレ」を発生させない方法としては、
・「MKV形式」のコンテナで出力する
・「MKV形式」コンテナから「MP4形式」コンテナにremuxする(劣化なし)
・「x264guiEx」の音声エンコードディレイカット機能を使う
まず「MKV形式」のコンテナで出力するについてです。「x264guiEx」のそのままの状態では「MKV形式」で出力が出来ないので、別途「MKVToolNix」をインストールして、「mkvmerge.exe」を指定する必要があります。後は、出力ファイルを保存する場所の画面で、ファイルの種類を「mkv file (*.mkv)」を選択すればOKです。再生プレイヤーが対応していれば「MKV形式」のコンテナファイルをそのまま再生できますし、「MKV形式」のコンテナファイルは「YouTube」のアップロードも対応しています。


「MP4形式」のコンテナじゃないと嫌だと言う人は、「MKV形式」コンテナから「MP4形式」コンテナに変換します。コンテナ形式を変えるだけなので再エンコードしませんので、この処理は短時間で終わります。使うツールは「ffmpeg」(CLI)。CLIが嫌だっていう人は、フリーソフトのメディアコンバータ
「XMedia Recode」がお勧め。ビデオ/音声トラック1のモードは「コピー」を選択する事で、再エンコードが行われずに「MP4形式」のコンテナに高速変換できます。
最後は、「x264guiEx」の音声エンコードディレイカット機能を使う方法。「x264guiEx」の設定画面にディレイカットの項目があり、「音声カット」or「映像追加」を選択してエンコードする事で「音ズレ」が解消します。注意点としては、それぞれ副作用があって
・先頭の音声を削除 → 動画の先頭の音が遅れのぶん(60~120ms)強制的に無音になる
・映像を先頭に追加 → 2~4フレーム程度映像が先頭に追加される
動画の状況によって使い分けをしましょう。
http://rigaya34589.blog135.fc2.com/blog-entry-454.html
■エンコーダディレイの確認方法
エンコーダディレイを視覚的に確認する為、以下の10本の動画を用意しました。
・ソースファイル
・「AviUtl」+「x264guiEx」→「MP4形式」コンテナ
・「AviUtl」+「x264guiEx」(QSVEnc使用)→「MP4形式」コンテナ
・「AviUtl」+「x264guiEx」(先頭の音声を削除)→「MP4形式」コンテナ
・「AviUtl」+「x264guiEx」(映像を先頭に追加)→「MP4形式」コンテナ
・「AviUtl」+「x264guiEx」→「MKV形式」コンテナ
・「AviUtl」+「x264guiEx」(QSVEnc使用)→「MKV形式」コンテナ
・「MKV形式」コンテナ+「ffmpeg」→「MP4形式」コンテナ
・「MKV形式」コンテナ+「XMedia Recode」→「MP4形式」コンテナ
・「TMPGEnc 4.0 XPress」→「MP4形式」コンテナ
動画を「AviUtl」で「L-SMASH Works File Reader」入力プラグインを使って読み込ませ、音声を「WAVE形式」にデコード。それをフリーのサウンド編集ソフトである
「Audacity」でそれぞれ読み込ませ、波形を比較した画像がこちら。
「AviUtl」+「x264guiEx」→「MP4形式」コンテナ(QSVEnc使用含む)でエンコードした動画の音声が、
ソースファイルよりも「0.055秒」遅れているのが確認できます。音声圧縮で使用した「Nero AAC Encorder」のエンコーダーディレイ値(曲の先頭にある無音部分)は、「2624サンプル」。音声のサンプリングレートが48kHzなので、2624sample / 48000(sample/sec) = 55ms。上記「0.055秒」とピッタリ一致します。今回のエンコーダディレイ値の「55msec」は、60fpsの動画だと約3.29フレーム、30fpsの動画だと約1.65フレームの遅延となります。なお、個人差やシチュエーションにも寄りますが、人間の耳は60msecぐらいから「音ズレ」をはっきり認識できるようです。
補足になりますが、「AviUtl」+「x264guiEx」(映像を先頭に追加)→「MP4形式」コンテナの音声が更に遅れているのは、2~4フレーム程度映像が先頭に追加された為、映像と音声が全体的に後ろにシフトしているからです。また、「TMPGEnc 4.0 XPress」→「MP4形式」コンテナだと、「0.022秒」の「音ズレ」が発生するようです。
■まとめ
・「AviUtl」+「x264guiEx」で「MP4形式」コンテナにエンコードすると、音声エンコーダの遅延問題で「音ズレ」が発生
・サンプリングレートが48kHzの音声で「Nero AAC Encorder」を使うと、55msecの遅延
・対策1:「MKV形式」コンテナでエンコード後、「MP4形式」コンテナでremux
・対策2:「x264guiEx」の音声エンコードディレイカット機能を使う
長くなりましたが、以上により「AviUtlの音ズレ対策」についての解説を終わります。
ブログ一覧 |
動画編集講座 | 日記
Posted at
2014/11/27 00:00:00