広告 MP3、AAC音質関連

YouTubeのOpus(251)音声ファイルを抽出して、音声ファイルのビットレートを調べてみました。

スポンサーリンク

 

前回ブログで紹介した、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 を経由します。

  1. HomebrewとFFmpegのインストール、弊記事(リンク)を参照してください。
  2. youtube-dlのインストールは、ターミナルを起動して、 brew install youtube-dl   を実行します。

youtube-dlについて、(リンク参照
YouTubeやその他の動画共有サイトから動画や音声ファイルをダウンロードするためのコマンドラインプログラムです。 Pythonで記述されており、クロスプラットフォームで利用可能です。 また、多数の動画共有サイトに対応しています。

注意:動画や音楽をインターネット上からダウンロードする行為は、法律に違反する場合があるため、実際にダウンロードする場合は『違法ダウンロードにならないか』を事前に確認し、自己責任で行ってください。また、法律上違法行為に該当しない場合でも、サイトの利用規約によりダウンロードを禁止している場合もあります。

 

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) であることが判ります。

注記)YouTubeファイルの情報を調べるだけなら、FFmpegをインストールする必要はありません。

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」について、

「opus-tools」は、ターミナルで使用する「opusenc CLI:エンコーダ」「opusdec CLI:デコーダ」及び「opusinfo CLI:情報ツール」の3つのコマンドラインがセットされています。

「opus-tools」のインストールは、Opusの公式DLページ(リンク)の圧縮ファイルをDLしてインストールします。 詳しくは、弊記事(リンク)を参照してください。

ターミナルから、-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であることが判りました。

 

オペレータ
オペレータ
ここまで来ますと、AACエンコーダで劣化レベルを調べたと同様に、Opus・128kbsが、Pink−Noizeによる劣化レベルが如何ほどになるのか知りたくなりますね。

 

Pink−NoizeによるOpus・128kbsの劣化レベルを調べる

今まで、非可逆圧縮(AAC or mp3)で行ってきたPink−Noizeによる劣化レベルの評価をOpus・128kbpsでも行って、どの程度のレベルに位置するかを調べてみます。

劣化レベルを調べる手順

  1. 基準となるPink−Noize(-20db 24bit 48khz 5s)をwavegeneでwavファイルを作成
  2. 基準Pink−Noizeを以下のopusenc CLIでOpus・120kbpsに変換する。
     $opusenc "Pink−Noize.wav" --bitrate 128 --cvbr "Pink−Noize.opus" 
  3. AudacityはOpus未対応なので、以下のopusdec CLIでOpusファイルをwavに変換する。
     $opusdec "Pink−Noize.opus" --rate 48000 "Pink−Noize_opus.wav" 
  4. Audacityに基準の「Pink−Noize.wav」と「Pink−Noize_opus.wav」を取込み夫々の「分析」>「スペクトル」 han窓 size16384 でデータ(周波数毎のレベル)を txtに書き出す。
  5. 夫々のtextデータをNumbers(又はExcel)に取込み周波数毎のデータの【絶対誤差(劣化)】=【Opusレベル】ー【 基準Pink−Noizeレベル】を求める。
劣化量の数値化(定義):再生帯域内の絶対誤差バラツキの標準編(σ)を調べて、3σのレンジ[(x+3σ)-(x-3σ)=2*3σ] を算出し、この値(3σレンジ)を劣化量と定義しました。 (3σレンジを劣化量と定義した意味は、絶対誤差は略正規分布しているので、3σレンジを求めれば、99.7%の確率で絶対誤差のバラツキが含まれると考えたからです)

 

point
1
Opus・128kbps 絶対誤差(劣化)のグラフ

劣化量・詳細グラフ

blank

15.5khz付近から劣化が増大している

劣化量・全体グラフ

blank

Cut-Offは20khzになっている

このグラフで分かること

  1. Opus128kbpsの再生できる上限周波数は20khz。 例えばiTunesでAACを128kbpsで変換すると、上限周波数は、16khz程度です。 なお、Opusエンコーダは、36kbps以上から上限周波数が20khzでエンコードされます。(弊記事リンクを参照)
  2. 聴感上気にならなくなる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
FFmpegのlibfdk_aac16bit入力が難ですが、世の中的に評価の高いエンコーダです。(AACのランキング参照

この統計データで分かること

  1. データ範囲をオールオーバーで見ると、劣化量から各エンコーダの音質順位は、libfdk AAC > Opus > native AAC 
  2. データ範囲を15khz以下でみると、劣化量から各エンコーダの音質順位は、Opus > libfdk AAC > native AAC 

 

以上、YouTubeで公開されている「トロヴァトーレ全曲」』の音声 Opus(251)ビットレートは≒128kbpsと想定出来ました。 更に、データ範囲を15khz以下に限れば、Opus・128kbpsのPink−Noizeによる劣化量は、FFmpeg libfdk_aac エンコーダより勝ることが判りました。

 

スポンサーリンク

 

スポンサーリンク

 

t