前回ブログで紹介した、YouTubeに公開されている『オペラ対訳プロジェクトで対訳付き「トロヴァトーレ全曲」』の画面右クリックして詳細情報を確認すると音声コーディックがOpus (251)であることが分りました。
このOpus (251)の音質を知る上でビットレートが如何程のものかネットで調べたところ、GitHubにあるDHASH Audio(リンク先参照)の表から、Opus (251)は、(VBR) <=160 Kbpsとなっていて上限が160kbpsであることは分かるものの、「トロヴァトーレ全曲」の実際上の音声ビットレートは明らかではありません。
そこで、YouTube公開「トロヴァトーレ全曲」の音声ファイルOpus(251)をダウンロードして、ダウンロードしたOpusファイルからビットレートを探ってみることにしました。
YouTubeの音声ファイルを抽出する方法
Mac用の「MacX YouTube Downloader」アプリで簡単にYouTubeのファイルをダウンロードできますが、音声ファイルの抽出はm4a(AAC)フォーマットだけで、Opusファイルは抽出できませんでした。
Opusファイルを抽出するには
コマンドラインで使用する youtube-dl と FFmpegをインストールすることで、簡単にOpusファイルを抽出することが出来ます。 更にYouTubeフォーマット情報の取得もできます。
インストールするには、Homebrew を経由します。
youtube-dl を使ってYouTubeの音声ファイルを抽出してみる
point
1 先ず、YouTubeファイルの情報を調べる
ターミナルから、 youtube-dl -F YouTubeのURL を実行します。(-Fオプション) 例えば、YouTubeに公開されている『オペラ対訳プロジェクトで対訳付き「トロヴァトーレ全曲」』の画面を右クリックして、動画のURLをコピーして実行すると下の情報が得られました。
command $ youtube-dl -F YouTubeのURL 〜〜 [info] Available formats for b2Vuk60vUu0: format code extension resolution note 249 webm audio only tiny 51k , webm_dash container, opus @ 51k (48000Hz), 24.31MiB 250 webm audio only tiny 67k , webm_dash container, opus @ 67k (48000Hz), 31.89MiB 140 m4a audio only tiny 127k , m4a_dash container, mp4a.40.2@127k (44100Hz), 59.98MiB 251 webm audio only tiny 131k , webm_dash container, opus @131k (48000Hz), 61.89MiB 278 webm 256x144 144p 49k , webm_dash container, vp9@ 49k, 30fps, video only, 23.59MiB 〜中略〜 18 mp4 640x360 360p 244k , avc1.42001E, 30fps, mp4a.40.2 (22050Hz) 22 mp4 1280x720 720p 761k , avc1.64001F, 30fps, mp4a.40.2 (44100Hz) (best)
黄色文字で示された情報が、音声フォーマットになります。
前述のOpus(251)は、opus @131k (48000Hz), 61.89MiBに対応して、ビットレートが131kbps,サンプルレートが48khz,ファイルサイズが61.89MiB(= 64.8964MB) であることが判ります。
point
2 YouTubeの音声ファイルOpus(251)を抽出する
youtube-dlの -f と-x オプションを使うと音声ファイルを抽出できます。 例えば、-f 251 -x を付記して、ターミナルから youtube-dl -f 251 -x YouTubeのURL を実行すると 「opus @131k (48000Hz), 61.89MiB」が抽出できます。
また、オプションを-f 140 -x にすれば、AACの「mp4a.40.2@127k (44100Hz), 59.98MiB」が抽出できます。
注記)-x オプションで、FFmpegと連携して音声ファイルをダウンロードできます。 また、-o オプションを追記すれば、フルパスでファイル名を出力(指定)できます。
YouTubeから抽出された音声Opusファイルの情報からビットレートを特定する
Opusファイルの情報は、Mediainfoでも確認できますが、更に詳しくOpusファイル情報見るツールに「opus-tools」の中にあるopusinfo CLIで確認できます。
「opus-tools」について、
ターミナルから、-v オプションで $ opusinfo -v 'YouTubeから抽出.opus'を実行した結果、以下の情報が得られました。
command $ opusinfo -v 'YouTubeから抽出.opus' New logical stream (#1, serial: 607c8207): type opus Encoded with Lavf59.27.100 User comments section follows... language=eng encoder=Lavf59.27.100 Opus stream 1: Pre-skip: 312 Playback gain: 0 dB Channels: 2 Original sample rate: 48000Hz Packet duration: 20.0ms (max), 20.0ms (avg), 20.0ms (min) Page duration: 1000.0ms (max), 1000.0ms (avg), 860.0ms (min) Total data length: 64000972 bytes (overhead: 0.786%) Playback length: 65m:59.853s Average bitrate: 129.3 kb/s, w/o overhead: 128.3 kb/s Logical stream 1 ended
黄色文字部分から、「トロヴァトーレ全曲」の音声ファイルOpus(251)
のビットレートは≒128kbpsであることが判りました。
Pink−NoizeによるOpus・128kbsの劣化レベルを調べる
今まで、非可逆圧縮(AAC or mp3)で行ってきたPink−Noizeによる劣化レベルの評価をOpus・128kbpsでも行って、どの程度のレベルに位置するかを調べてみます。
劣化レベルを調べる手順
- 基準となるPink−Noize(-20db 24bit 48khz 5s)をwavegeneでwavファイルを作成
- 基準Pink−Noizeを以下のopusenc CLIでOpus・120kbpsに変換する。
$opusenc "Pink−Noize.wav" --bitrate 128 --cvbr "Pink−Noize.opus" - AudacityはOpus未対応なので、以下のopusdec CLIでOpusファイルをwavに変換する。
$opusdec "Pink−Noize.opus" --rate 48000 "Pink−Noize_opus.wav" - Audacityに基準の「Pink−Noize.wav」と「Pink−Noize_opus.wav」を取込み夫々の「分析」>「スペクトル」 han窓 size16384 でデータ(周波数毎のレベル)を txtに書き出す。
- 夫々のtextデータをNumbers(又はExcel)に取込み周波数毎のデータの【絶対誤差(劣化)】=【Opusレベル】ー【 基準Pink−Noizeレベル】を求める。
point
1 Opus・128kbps 絶対誤差(劣化)のグラフ
このグラフで分かること
- Opus128kbpsの再生できる上限周波数は20khz。 例えばiTunesでAACを128kbpsで変換すると、上限周波数は、16khz程度です。 なお、Opusエンコーダは、36kbps以上から上限周波数が20khzでエンコードされます。(弊記事リンクを参照)
- 聴感上気にならなくなる15.5khz付近から絶対誤差が急増しているのが判りました。
point
2 絶対誤差(劣化)の統計データ(FFmpeg AACエンコーダ比較)
Opusエンコーダの絶対誤差・統計データ
Opus・128kbps | ||
データ範囲 | 10hz〜19khz | 10hz〜15khz |
x(平均) | 0.00db | 0.00db |
σ(stdevp) | 0.29db | 0.17db |
x+3σ | 0.88db | 0.53db |
x-3σ | -0.87db | -0.52db |
劣化量(x|±3σ|) | 1.76db | 1.05db |
max | 1.65db | 0.83db |
min | -2.26db | -1.03db |
レンジ | 3.91db | 1.86db |
FFmpegのlibfdkとnative AAC(弊記事より引用)
AAC128kbps | libfdk | native |
データ範囲 | 10hz〜19khz | 10hz〜15khz |
x(平均) | -0.17db | -0.57db |
σ(stdevp) | 0.22db | 0.66db |
x+3σ | 0.49db | 1.40db |
x-3σ | -0.84db | -2.53db |
劣化量(x|±3σ|) | 1.32db | 3.93db |
max | 0.63db | 1.87db |
min | -1.07db | -3.92db |
レンジ | 1.70db | 5.79db |
この統計データで分かること
- データ範囲をオールオーバーで見ると、劣化量から各エンコーダの音質順位は、libfdk AAC > Opus > native AAC
- データ範囲を15khz以下でみると、劣化量から各エンコーダの音質順位は、Opus > libfdk AAC > native AAC