だいぶ経ってしまいましたがお正月にちょっと実験くんです。当方 AviUtl を使用して YouTube 動画アップロード用の mp4 ファイル——映像の方は静止画一枚なので動かない「動画」なのだが(笑)——を出力しておるのですが、過日 YouTube 上で音質についてのコメントを頂いた。しかしこれまで下記のような次第でそれほど頓着せずにアップしており、
要するに YouTube にアップロードされた動画ファイルはサーバーで再エンコードされ、(われわれ泡沫チャンネルの音声は通常)最高でも AAC-LC(mp4a/m4a)/CBR 128 kbps が使用されるということらしく(以前は HD 動画については 192 kbps)、ABR 192 kbps でアップロードしておった訳です。[追記]投稿後20日ほどだが(2020/02/25)PC 環境では IE(など?)を除き Opus 再生に移行したように見える。詳細不明。以下関連する記述にも打消(打消)を入れた。
YouTube ヘルプには音声コーデック:AAC-LC 、ビットレートはモノラル:128 kbps、ステレオ:384 kbps、5.1:512 kbps 推奨とある *1 。ステレオは 1 ch ぶん表記 192 kbps ということで、「おすすめ」どおりアップしていたということでいいのだろう(たぶん)*2 。が、これって実際にはどうなのか。
さきに結論から申しますと、少なくとも今回のサンプルのデータ上においては、Opus 再生を前提にすると YouTube 推奨のビットレートよりも上げておいたほうがよいことがわかった。以下ご報告。一部サンプルにおいては YouTube 側の再エンコードで特性が部分的に改善(というか回復)するというような現象も見られた。図表も多くなり——じぶんでもワケが分からなくなりつつある(苦笑)——けっこう長くなったのでエントリその二に続く。
1. 結論
現状、ならびに今回のデータにおいて、YouTube アップロード用の音声ファイルは、
AAC-LC のサンプルは qaac(mp4a/mp4)で作成。Opus と Vorbis のビットレートは 160 kbps(VBR)以外は試していない(詳細は下記 2項 参照)。また、周波数特性上の差が現れるのは概ね 15 kHz 以上の高周波域である。いっぽう YouTube 側でのエンコードについては今後も変更 → 再エンコードということもあり得るであろうから、推奨値以上のスペックでアップロードしておくというのも一理あることではありましょう。YouTube にしてみれば迷惑な話ですが。
2. サンプル
(1) 音源
聴感上どうかもかくにんしてみたいというところで、オケの CD 音声つかってみた。(優秀録音との評も聞いたことはないが割と新しめのから——これがほとんど手元にないという(苦笑)——エッシェンバッハ指揮フィラデルフィア管/『悲愴』SACD ハイブリッド盤(2008年)の CD 層を iTunes により WAV で PC 取り込み、例の第一楽章提示部終わり pppppp へのあたりから展開部のトゥッティ3分間を FFmpeg で切り出し FLAC に変換。
(2) サンプル動画
AviUtl( x264guiEx および FFmpegOUT プラグイン)、FFmpeg 、 mkvtoolnix を使用して下記 No. 01 から 08 の動画ファイルを準備。とちゅう後述の 図1 にあるとおり映像を HD サイズにしていなかったことに気づいたが、いずれにせよ前述のとおり YouTube 側の AAC-LC エンコードの最大ビットレートは 128 kbps ということらしいのでよしとした。
No. | 音声 コーデック |
音声 ビットレート [kbps] |
コンテナ | 映像 コーデック |
備考 |
00 | FLAC | VBR 555 | ─ | ─ | FFmpeg, 元ファイル |
01 | AAC-LC (qaac) |
ABR 128 | mp4 | H.264 | AviUtl−x264guiEx |
02 | ABR 192 | ||||
03 | ABR 256 | ||||
04 | ABR 320 | ||||
05 | Vorbis | VBR 160 | webm | VP9 | sps = 48 kHz, AviUtl−FFmpegOUT |
06 | Opus | sps = 48 kHz, FFmpeg |
|||
07 | FLAC | VBR 555 | mkv | mux: mkvtoolnix | |
08 | (WAV) | CBR 1,411 |
表1 、音声動画サンプル
No. 05 以下 AAC-LC 以外のコーデックもつくってみた。mkv ファイルは公式には YouTube 未対応だが *3 アップロードできるということで。No. 05(Vorbis/WebM)、06(Opus/WebM)はサンプリング周波数 48 kHz にリサンプリングされている。*1 の「おすすめ」にも関わらず「パートナー様」へは推奨している FLAC *4 も加え(No. 07)、さらについでにおおもとの WAV もアップできるのか試してみた(No. 08)。いろいろなツールを使っているのは単に当方が AviUtl プラグインの使い方を分かっていないためで、深入り(?)せず先に進めた(汗)。
3. 方法
(1) アップロード
サンプル No. 01 から 08 のファイルを YouTube にアップロード。
(2) ダウンロード
生成されたファイルから youtube-dl でビットレートの高い、フォーマットコード 251(opus/webm:以下 webm と記載)と 140(mp4a/m4a:以下 m4a 同)の音声ファイルをダウンロードした。下図は yourube-dl による、サンプル No. 06(Opus/WebM)において YouTube が生成したファイルのリスト。ビットレート、サンプリング周波数については 251 に @160 k (48000Hz) 、240 に @128 k (44100Hz) とある(図1)。
図1 、出力ファイル一覧(サンプル No. 06)
(3) 波形比較
相応のツールもいろいろあるのだろうが、ここではとりあえず Audacity に取り込んで波形比較を行なう(「サンプル形式(デフォルト)」設定:32bit浮動小数点)。以下サンプル No. 06(Opus/WebM)アップロードの例。トラック1(上側)がアップロード入力ファイル、トラック2(下側)がダウンロード webm 出力ファイル。出力側にはクリップ表示の赤線が…(図2)。
図2 、入/出力(webm)ファイル波形比較(サンプル No. 06)
(4) 最大レベル比較
「エフェクト」→「増幅」で確認すると、入力ファイルには 0.238 dB の余裕があったが、出力ファイルは 0 dB にタッチしている(図2)。
図3 、入/出力(webm)ファイル最大レベル(サンプル No. 06)
YouTube 再生画面右クリックで確認できる「詳細統計情報」に "content loudness" の表記があるように YouTube 側で音量調節行なってるようですが、再生側の都合など考えると 0 dB にもってくというのは…ただし後述のようにクリップ表示はこの一か所のみ、波形も潰れていない。こんなものなのだろう(後述エントリその二 4.3 (1) 参照)。アップロード時の最大レベルは控えめに、というところか(すなわち YouTube 側エンコードで 0 dB にタッチすることがある)。
(5) 入出力シンクロ
図2 の拡大(図4、クリップ部分は右下)。小さいが波形の欄外下側「選択範囲の開始点と終了点」のとおり、1分47.660秒 − 1分47.653秒 = 0.007秒ほど遅延している。
図4 、入/出力(webm)ファイル波形比較(サンプル No. 06)
「移動ツール」で出力ファイル側の開始位置を合わせた(図5 、クリップ部分が左に移動)。
図5 、入/出力(webm)ファイル波形比較(サンプル No. 06)
クリップ部分さらに拡大。シンクロした(図6)。波形の方は潰れてはいなさそうでジャスト・ゼロというかんじ。
図6 、入/出力(webm)ファイル波形比較(サンプル No. 06)
この「シンクロ」した状態で終端部をみると(図7)、トラック2(下側)の出力ファイルは途中でカットされているのがわかる。つまり先頭側に上述の 0.007 秒が足され、終端側で 0.007 秒がカットされていた(ように見える)。mux/demux かんけい(?)、よくわからんですが先に進む(苦笑)。
図7 、入/出力(webm)ファイル末端部波形比較(サンプル No. 06)
(6) 差分抽出
ノーマライズが必要なのかもだが適切(?)なものになるとも思えず、単純に差分を抽出して違いを確認する。出力ファイルを「エフェクト」→「上下反転」後、「トラック」→「ミックス」→「新しいトラックにミックスして作成」で差分を抽出(図8)。差分の最大入力レベルは −17.846 dB(図9)。
図8 、入/出力(webm)ファイル差分抽出(サンプル No. 06)
図9 、入/出力(webm)ファイル差分最大レベル(サンプル No. 06)
(7) m4a 出力ファイル
同様に m4a 出力ファイルも差分抽出。こちらは最大入力レベル −0.451 dB と入力ファイルより減少した。webm がクリップした場所で入力ファイルからの遅延 0.043 秒。終端側にも無音が足されているかんじだった(0.004 秒ほど)。
サンプリング周波数 44.1 kHz なので移動ツールだけでは完全にシンクロ出来ないが(図10 、上:webm 、下:m4a)、クリップの位置(3分の音源の 1分47秒653 付近)でズレが最小になるよう調整した上でリサンプリングは行なわず 図10 の状態で上下反転 → 入力ファイルとミックスした(ミックス時 48 kHz にリサンプリング)。差分の最大入力レベルは −15.046 dB と webm 差分より 2.8 dB 上昇。ただしサンプリング周波数の違いによる影響が大きそうではある(後述エントリその二 4.6.2 参照)。
図10 、出力ファイル波形比較:「移動ツール」調整後のずれ(サンプル No. 06)
(8) 周波数特性比較
「解析」→「スペクトル」での周波数特性比較。上:入力ファイル、中:出力ファイル webm 、下:出力ファイル m4a(図11)。
図11 、入/出力ファイル周波数特性比較(サンプル No. 06)
わかりにくいのでデータ「書き出し」でテキスト出力し、表計算ソフトでグラフ化してみる。変換元の FLAC も追加した(図12)。
図12 、入/出力ファイル周波数特性比較(サンプル No. 06)
入力の webm(濃い青) はハイカット 20 kHz まで FLAC をトレース。YouTube 出力の webm(ピンク)は 15.8 kHz 過ぎあたりから反応(?)が鈍くなり上振れしている。ハイカット 15.8 kHz の m4a 出力(赤)は 15 kHz あたりから息切れ。以上後述 4.2.2(エントリそのニ)も参照。
ぜんたいでも m4a が下がり気味に見えますが、実際には webm の方が入/出力ともやや上ずり気味、入力ファイルのエンコード時点ですでに上ずっていて m4a 出力で戻したようにも見える。ひとつには Opus(および Vorbis)とそれ以外ではサンプリング周波数の違いにより Audacity の周波数特性値取得ポイントが異なるというのがあるかもしれない(?)。また、サンプル No. 05(Vorbis/WebM)ほどではないが、図12 の 14 kHz – 15 kHz 間で見られるように、webm 出力は 6 kHz 過ぎから 波形の谷部分で上振れぎみ。05 については 4.4(エントリその二)参照。
(9) ビットレート比較
ところで、入力ファイルの webm から FFmpeg で取り出した(-acodec copy)opus ファイルの容量は 3,464 KB 、出力ファイル webm から同じく取り出した opus は 2,760 KB 。二割くらいダイエットしてます。そんなんで出力ファイルは平均 160 kbps( (3) 参照)出ていない(?)ようである。図13 は MPC-HC での再生画面、上:入力ファイル opus(平均 156 kbps)、中:出力ファイル opus(平均 124 kbps)*5 。FFmpeg でも前者は "bitrate: 157 kb/s" 、後者は "bitrate: 125 kb/s" と出た。下:出力ファイル m4a は平均 128 kbps、MPC-HC 再生中の「(現在) 」もほぼ 128 kbps で動かず固定(すなわち CBR)。以上 表2 参照。
図13 、入/出力ファイル・ビットレート比較(サンプル No. 06)
ファイル | ビットレート [kbps] | 容量 [KB] |
備考 | |
MPC-HC (平均) |
FFmpeg | |||
入力 opus | 156 | 157 | 3,464 | 入力 webm(映像あり)から FFmpeg で demux |
出力 opus | 124 | 125 | 2,760 | 出力 webm(映像なし)から FFmpeg で demux |
出力 m4a | 128 | 129 | 2.845 | (映像なし) |
表2 、入/出力ファイル・ビットレート比較(サンプル No. 06)
聴感上の違いは…当方の環境・耳では聴き取れない——付け加えれば、元の FLAC とでさえ…というのは秘密だ(笑)。
(10) アップロード結果
前述 図13 の MPC-HC に表示されているファイル名に ID が含まれているが、サンプル 06 のアップロード結果は下記(真っ暗である)。上述のように webm(251)は使用されず m4a(240)再生になる。 "content loudness" の値は −4.1 dB 。
動画1 、アップロード結果(サンプル No. 06)
(11) 差分ファイル
上述 (7) による「差分」ではあるが、おもわぬ検証(?)ができたのでご紹介。差分ファイルそれぞれを FLAC で出力し、後述 (12) のような状況なので mkv に格納して YouTube にアップ。ついでに上の反省を踏まえ(?)Audacity の再生映像も付けてみた(動画2 および 動画3)。展開部トゥッティは52秒あたりから(音量注意)。m4a (動画3)の方はかなり楽器らしい音になって(しまって)おり、最初のクラリネット・ソロも聴きとれる。「詳細統計情報」"content loudness" はそれぞれ −22.4 dB 、−21.0 dB 。
動画2 、入/出力(webm)ファイル差分(サンプル No. 06)
動画3 、入/出力(m4a)ファイル差分(サンプル No. 06)
今回アップしたサンプル No. 01 から 08 の動画はすべて "Naxos:unknown artist" の音源として "AdShare MG for a Third Party(Naxos の代理)" が収益化しているのだが( "unknown" ねぇ。Naxos は手広くやってるようですが *6 )、動画2 では権利を主張していない。さすがにこうなると Content ID さまも検出出来ないようだ。が、動画3 では、No. 01 から 08 同様「コンテンツ内の対象範囲 0:00 – 3:00」でしっかり(?)検出した。ちなみに周波数特性値の入力ファイルとの相関係数は前者 0.804 、後者 0.925 。
(13) 音声ファイル
ここまでの音声ファイルは Google ドライブにアップしたので、<audio> タグの共有先アドレス open → uc 変更で貼ってみた——のだが再生出来ない(そもそも webm は?ですが)。なお、当方ブラウザは普段 Chrome を使用しており、以前別にアップしてあった mp3 も再生できなくなっている(設定なにか弄ったかしらん Microsoft Edge からであれば上記 mp3 は再生可能、今回の分は、すべて「この種類のオーディオ ファイルはサポートしません」)。よくわからんですが取り敢えずそのままにしておく。
- 変換元ファイル flac(16 bit / 44.1 kHz)
- 入力ファイル切り出し opus(アップロード動画ファイルは webm に mux)
- 出力ファイル webm(音声コーデック opus)
- 出力ファイル m4a(音声コーデック mp4a)
- 出力 webm 入出力差分ファイル flac(24 bit / 48 kHz)
- 出力 m4a 入出力差分ファイル flac(24 bit / 48 kHz)
(つづく)
*1:
*2:改めて眺めてみると YouTube 側での AAC-LC エンコードは CBR ということで、ここで表記のビットレートは CBR ??、などともおもったがよくわからない。
*3:
*4:ビット深度は「24 ビット推奨、16 ビット使用可」、サンプリング周波数の方は「44.1 kHz 推奨」、それ以上も使用可だが必須ではない、としている。
*5:念のためそれぞれ webm でも確認したが同じ。
*6:と疑いの目を向けてしまったが、動画1 を YouTube 上で再生するとかくにんできるとおり「この動画の音楽」にはフィルアップのチャイコフスキー "Dumka" も表示しており、正当な主張のようである。