音声エンコーダの遅延問題

複数のエンコーダを使ってそれぞれの遅延の有無と、音声時間の変動を調べた。

まとめ


可逆圧縮は時間は変わらず、Fraunhofer_mp3, lame, speex だけ音声が短くなり、それ以外の全ては時間が長くなった。AAC では特に fdk_aac_he, fdk_aac_he_v2 で大きな遅延が見られ、nero_aac は 1pass と 2pass を比較しても遅延が発生しなかった。AAC では LC よりも HE, HE よりも HE_v2 の方が遅延や時間が長くなったが、aacplus だけ、HE と HE_v2 の長さが一致した。

AAC 以外のエンコードについては opus は優秀であるが動画投稿向けではない。ローカル環境の保存として x264/opus MKV や、音楽ファイルとして有効に使える。また歌ってみたなどで MIX を依頼するときに無圧縮の音声ファイルである WAV を送ってくださいと言われるのは、無劣化であるというのもあるが、この遅延問題も大きな理由である。

関連記事
AviUtl で出力したときにどのような場合に音がずれるのか

使用エンコーダ


  • iTunes 11.0.2 for Windows (64-bit)
    itunes_aac, itunes_mp3, itunes_alac
    http://www.apple.com/jp/itunes/download/

  • ffmpeg-20130408-git-9dc88ac-win64-static,
    libopus, native_aac, speex, nellymoser, alac, flac は zeranoe ビルドより
    http://ffmpeg.zeranoe.com/builds/win64/static/
  • ffmpeg-HEAD-90a56eb.tar.gz
    libaacplus-2.0.2
    http://tipok.org.ua/node/17
    fdk-aac
    https://github.com/mstorsjo/fdk-aac
    faac-1.28
    http://sourceforge.net/projects/faac/files/faac-src/

  • えこでこツール 1.14
    http://sourceforge.jp/projects/ecodecotool/
    Fraunhofer は付属のもの

  • neroAacEnc 1.5.4.0
    http://www.nero.com/jpn/company/about-nero/nero-aac-codec.php

  • Quicktime 7.7.3
    http://www.apple.com/jp/quicktime/download/
    qaac 2.18
    https://sites.google.com/site/qaacpage/cabinet


エンコード素材


魔法少女まどか☆マギカBDの2巻に入っているサウンドトラックの2曲目より。「Salve, terrae magicae」は次回予告に流れる曲で、全3巻のサウンドトラックの中で一番圧縮率が低かった曲である。

エンコーダの種類と内訳


AAC:13
MP3:3
ogg:3
nellymoser:1
可逆圧縮:2
オリジナル:1

AAC


ffmpeg_native_aac_lc
faac_lc
fdk_aac_lc
fdk_aac_he
fdk_aac_he_v2
aacplus_he
aacplus_he_v2
nero_aac_lc
nero_aac_he
nero_aac_he_v2
qaac_lc
qaac_he
itunes_aac_lc

MP3


lame_mp3
fraunhofer_mp3
itunes_mp3

OGG


vorbis
opus
speex

可逆圧縮


itunes_alac
ffmpeg_alac
ffmpeg_flac

その他


nellymoser
itunes_wav

使用コマンドオプション


ffmpeg


-acodec aac -strict -2
-acodec libfaac
-acodec libfdk_aac -ab 128k -afterburner 1
-acodec libfdk_aac -profile:a aac_he -ab 70k -afterburner 1
-acodec libfdk_aac -profile:a aac_he_v2 -signaling explicit_sbr -ab 20k -afterburner 1
-acodec libaacplus -ab 70k // HE-AAC
-acodec libaacplus -ab 20k // HE-AAC v2
-acodec vorbis -strict -2
-acodec libopus -ar 480000
-acodec libmp3lame
-acodec speex -ac 1 -ar 16000 -ab 28k
-acodec nellymoser -ac 1
-acodec alac
-acodec flac

iTunes


aac 160k
mp3 160k

えこでこツール


Fraunhofer cbr 128k

nero


-2pass -lc -br 128000 -of nero_aac_lc_2p.m4a
-2pass -he -br 70000 -of nero_aac_he_2p.m4a
-2pass -hev2 -br 20000 -of nero_aac_he_v2_2p.m4a

qaac


in.wav -o qaac_lc.m4a
in.wav --he -o qaac_he.m4a

検証方法


CD から itunes を使い wav にエンコードし、それぞれのエンコーダを使いエンコードする。そして ffmpeg でモノラル wav にエンコードし、Audacity 2.0.3 で波形表示してオリジナルと比較して遅延の確認と、真空波動研Lite 130324 で音声時間の確認した。ただし、speex と opus はサンプリング周波数が異なるので、44.1kHz の WAV に変換し直している。

エンコード後の音声時間


開始時間や総時間が変わらないのは無圧縮と可逆圧縮である WAV, Flac, Alac だけである。Fraunhofer_mp3, lame, speex だけ音声が短くなり、それ以外は全て時間が長くなった。AAC では LC よりも HE, HE よりも HE_v2 の方が長くなったが、libaacplus だけ、HE と HE_v2 の長さが一致した。opus.mkv で ogg に入っていないのは真空波動研で時間を測れなかったためにmkvコンテナに入れた。

[ori.wav]89.4390.000
[flac.flac]89.4390.000
[alac.m4a]89.4390.000



[aac.m4a]89.463+0.024
[faac.m4a]89.463+0.024
[fdk_lc.m4a]89.486+0.047
[fdk_he.m4a]89.555+0.116
[fdk_he2.m4a]89.578+0.139
[itunse_aac.m4a]89.489+0.050
[libaacplus_he.m4a]89.444+0.005
[libaacplus_he2.m4a]89.444+0.005
[nero_aac_lc.m4a]89.512+0.073
[nero_aac_he.m4a]89.582+0.143
[nero_aac_he_v2.m4a]89.582+0.143
[qaac_lc.m4a]89.489+0.050
[qaac_he.m4a]89.536+0.097



[Fraunhofer.mp3]89.290-0.149
[itunse_mp3.mp3]89.495+0.056
[lame_mp3.mp3]89.365-0.074



[nellymoser.flv]89.447+0.008
[opus.mkv]89.447+0.008
[speex.ogg]89.431-0.008
[vorbis.ogg]89.466+0.027
真空波動研Lite 130324 / DLL 130324 Unicode

エンコード後の音声波形


CDから itunes で wav にエンコードした場合と、そこから可逆圧縮形式の alac や flac にエンコードし、再度 wav に戻しても波形に変化はなかった。

m4a コンテナの低遅延ランキング(// 以下は上の位から遅延秒)
  1. faac, ffmpeg_alac, itunes_alac, nero3種, qaac_lc, itunes_wav
  2. qaac_he // 0.022
  3. aac // 0.002
  4. fdk_lc // 0.024
  5. libaacplus_he // 0.047
  6. fdk-he // 0.020
  7. libaacplus_he2 // 0.002
  8. fdk-he2 // 0.021


上から(aac = ffmpeg_native_aac_lc), faac, fdk_he, fdk_h2_v2, fdk_lc, ffmpeg_alac, itunes_alac, libaacplus_he, libaacplus_he_v2, nero_aac_he, nero_aac_he_v2, nero_aac_lc, ori(itunes_wav), qaac_he, qaac_he

aac_compare.png


m4a 以外の低遅延ランキング
  1. flac, lame_mp3, itunes_wav, vorbis
  2. nellymoser // 0.003
  3. speex, opus // 0.015
  4. Fraunhofer_mp3 // 0.013
  5. itunes_mp3 // 0.012


上から flac, fraunhofer_mp3, itunes_mp3, lame_mp3, nellymoser, opus, ori(itunes_wav), speex, vorbis

other_compare.png


nero の 1pass と 2p(pass) の違いで遅延に差はない
nero_2pass.png


nero と qaac_lc はオリジナルの wav と比べて音が遅延していない
nero_qaac_wav_compare.png


lame_mp3 と vorbis もオリジナルの wav と比べて音が遅延していない
lame_vorbis_wav_compare.png
関連記事

コメント

音声ファイルがまとめられていて
すごく参考になりました
ただ可逆圧縮がWAVと同じで遅延がないのは変です。
自分が非圧縮と可逆を混ぜてよく聞いてるせいで狂った耳かもしれませんが必ずコンマ数秒ずれます

ロベルト

Re: タイトルなし
コメントありがとうございます。

リンクし忘れていましたが、動画についても調べています。

AviUtl で出力したときにどのような場合に音がずれるのか
http://looooooooop.blog35.fc2.com/blog-entry-1106.html

この記事はけっこう苦労して書いたものですが、

>> 可逆圧縮がWAVと同じで遅延がないのは変です

記事より「ffmpeg でモノラル wav にエンコードし」

の部分で、もしかしたら無圧縮なのでデコード遅延がなくなっているのかもしれません。
今では ffmpeg の音声フィルタを使って波形を表示したり、エンコーダ部分の改良も
それからあるので再度調べると違う結果になるかもしれません。
今は時間が取れなくて再検証できませんが、動画の遅延問題を含めて再検証したいと思っています。

非公開コメント

プロフィール

ロベルト

お問い合わせはこちらまで
robelt2525[at]gmail.com

中の人 @nico_lab

広告リンク
Amazon
楽天市場

ブログ更新用 @blo_nico_lab

詳しいプロフィールはこちら

当ブログは、Amazonアソシエイトに参加しています。