広告 MP3、AAC音質関連 オーディオ一般 トピック記事

ffprobeで音声ファイルを解析|ビットレート変動をグラフ化(macOSショートカットで自動化)

Opusファイルのビットレート変動

※ 本記事は2026年2月に改訂しました。

音声ファイルのビットレート変動を可視化する際、FFmpeg の ashowinfo フィルターでは、WAV や Opus など一部の形式で正しく数値を取得できず、期待通りにビットレート変動をCSV化できないケースがありました。(前回の記事

本記事では、FFmpeg コンポーネントの一つである ffprobe を用いることで、WAV や Opus ファイルにおいても フレーム(サンプル)単位のビットレート情報を正確に取得し、CSVファイル を生成する方法を解説します。

さらに、macOSの「ショートカット」アプリを使い、音声ファイルを選択するところから、ビットレート変動を記録したCSVファイルの作成、そのCSVをもとにしたビットレート変動の可視化までを、以下の目的別にオールインワンツールとして、自動化処理を行う方法を紹介します。

  1. 統計処理やグラフ化を行う :
    CSVファイルが引き継がれたNumbersが自動起動する
  2. 直ぐにビットレート変動グラフを確認 :
    Pythonによるビットレート変動グラフを自動描画する

 

【ffprobe】でグラフ化した各種音声ファイルのビットレート変動グラフ

後述の「ドヴォルザークのスラヴ舞曲第1番」CD音源を元に、各種フォーマットに変換した音声ファイルを、今回のffprobeを用いた【ffprobe】でCSV化したビットレート変動データを、Pythonで作成したアプリでグラフ化しています。

WAV オリジナル音源(CBR)

AAC(VBR)

Opus(VBR)

MP3(VBR)

FLAC(frac-05)

 

オペレータ
オペレータ
ここから、ffprobeの説明になります。

 

ffprobeとフレーム情報について

ffprobeはFFmpegのコンポーネントの一部であるため、FFmpegが既にインストールされていれば、ffprobeも利用可能です。

ffprobeの導入

FFmpegがインストールされていない場合は、下の手順を参考にしてください。

ffprobeの導入手順(macOS の場合)

  • macOS の場合は、Homebrew を経由する必要があります。 Homebrew の公式サイトより、Homebrew を先ず、インストールしておきます。
  • ターミナルを開き、  brew install ffmpeg   を実行し、FFmpegをインストールします。
  • 念のため、  ffprobe -version  を実行し、ffprobeのバージョン情報が表示されれば、ffprobe がインストールされています。

ffprobeは、例えばmacOSならターミナルを開いてffprobeのCLIコマンドを実行することで、画像ファイルや音声ファイルから様々な情報を取得できます。 以下のコマンドを実行すると、基本的な音声ファイル情報が表示されます。

 command bash
ffprobe -hide_banner -i "Sound file"
備考:ビットレートモードについて
ffprobe 単体で「VBR / CBR / ABR」と明示的に情報を出すことはできません。 ビットレーモードを判別するには、今回説明するビットレート変動グラフから推定を行うことになります。

 

フレーム情報の基本

AACファイルのフレーム情報を確認するには、以下のffprobe・CLIコマンドを実行します。このコマンドを実行すると、[FRAME]〜[/FRAME]で囲まれた1フレーム分の情報が表示されます。 なお、パイプラインに `head -n 20` を付加することで、最初の20行のみを表示するようにしています。

 command bash
ffprobe imput.m4a -hide_banner -show_frames | head -n 20 -------コマンドを実行すると、以下が表示されます。------ 〜中略〜
[FRAME] media_type=audio stream_index=0 key_frame=1 pts=0 pts_time=0.000000 pkt_dts=0 pkt_dts_time=0.000000 best_effort_timestamp=0 best_effort_timestamp_time=0.000000 pkt_duration=1024 pkt_duration_time=0.023220 pkt_pos=972 pkt_size=465 sample_fmt=fltp nb_samples=1024 channels=2 channel_layout=stereo [/FRAME] [FRAME]

上記のフレーム情報(フィールド名=)において、赤文字で示すフィルド名 ’pkt_duration_time’および’pkt_size’が、次節で説明するフレーム単位のビットレートをCSV形式で出力するために必要なフィールド(列)データになります。
pkt_duration_time:パケット持続時間(sec
pkt_size:パケットサイズ(byte

 

基本|音声ファイルから【ffprobe】でフレーム単位のビットレートをCSV化する

  1. 下の「CSV化・bashコード」をテキストエディットアプリ等を開いてコピー&ペーストした後、”Sound file”を対象の音声ファイル名をフルパスで書き換えます。 同じく、”output.csv” を保存先のフルパスに書き換えてコードを編集しておきます。
  2. macOSのターミナル(bash)を開き、編集した「CSV化・bashコード」をコピー&ペーストします。
  3. bashコードを実行すると、音声ファイルのビットレート変動を記録した output.csv が、保存先に CSVファイルとして出力されます。

CSV化・bashコード

コードのffprobeオプション等要点

  • -show_frames:フレームに関する情報を出力
  • -select_streams a:音声(audio)ストリームだけを対象にする。(動画なら v 指定)
  • -show_entries frame=pkt_duration_time,pkt_size: フレームの情報のうち、出力したいフィールドを限定する。
  • -of csv=p=0:出力フォーマットをCSVにp=0 はヘッダ(カラム名)を表示しない設定
  • 4行目のawk -F',' :入力をカンマ区切りのフィールドとして、ビットレート計算含めた処理を実行する

CSV化・出力例

フルパスで指定した場所に"output.csv"が保存されています。 下の表がCSVファイルを開いた例になります。

pkt_duration_time pkt_size elapsed_time Bit Rate(kbps)
0.02322 371 0.02322 127.821
0.02322 372 0.04644 128.165
0.02322 371 0.06966 127.821
0.02322 372 0.09288 128.165
〜以降 略〜

3列目のelapsed_timeは、計算された経過時間で、 4列目のBit Rate(kbps)は (2列➗️1列) ✕ 8bit で計算されたビットレートになります。 この3列目と4列目を、例えばnumbersなどの計算ソフトにペーストしてグラフ化(次節で説明)します。

備考:
フレーム当りのサンプル数(SPF)は 
 pkt_duration_time ✕ サンプルレート(fs) で計算できます。 
例えば、上の「CSV出力例」では、音声ファイルのサンプルレート fs=44.1khzでしたので、SPF = 0.02322 ✕ 44100 = 1,024 になります。

 

 

スポンサーリンク

 

オペレータ
オペレータ
作成されたCSVファイルを可視化するには、表計算ソフトの起動とCSVファイルの読み込みが必要となり面倒です。 そこで、macOSショートカットを活用すれば、CSVファイルの作成から、そのCSVが引き継がれたNumbersの立ち上げまでの一連の作業を自動化できます。 更にPythonグラフを表示する機能も追加して、ビットレート変動を可視化するオールインワンツールの作成方法を、以下に述べて行きますね。

 

ビットレート変動を可視化するオールインワンツールを作成する手順

ツール・概要

macOSショートカットを活用し、音声ファイルをffprobeにてCSV形式に変換後、下記に示す目的別に一連の自動化処理を実行します。

  1. ビットレート変動の統計処理やグラフ化を行う :
    CSVファイルが引き継がれたNumbersが自動起動する
  2. 直ぐにビットレート変動グラフを確認 :
    Pythonによるビットレート変動グラフを自動描画する

まず、完成したショートカットの動作ビデオを下に示しますので、ご覧ください。

ツールの実行ビデオ

メニューで「直ぐにビットレート変動を確認」を選択した時のビデオです。

 

オペレータ
オペレータ
ここから、macOSショートカットによるビットレート変動を可視化するオールインワンツールの作成方法の説明になります。

 

アクションの配置と説明

macOSショートカット・アプリを起動して「ファイル」>「新規ショートカット」をクリックすると、まっさらなショートカット編集画面が現れます。 ここに必要なアクションを配置して行きます。 今回のショートカット名は【音声ファイル:ビットレート解析】にしました。

配置したアクションはです。 アクションは後から詳しくAct1Act8で説明していきます。

 

Act
1
アラート

このアクションで、設定されたタイトルなどのアラート・ダイアログが表示されます。

Act
2
ファイルを選択

このアクションで、Finderが開きビットレート変動をCSV化したい一つの音声ファイルを選択します。 選択されたファイルはファイルパスなどがマジック変数としてこのアクションから出力されます。

Key Points

Macショートカットが対話型UIのため、説明中にあるマジック変数の扱いに最初の内は、多少の戸惑いを伴います。 このマジック変数とは何なのか?、詳しくは下の「参考記事」をご覧ください。

参考記事macOSショートカットアプリ:これで分かったマジック変数の取扱い

Appleショートカットアプリは簡単にプログラムが組めますが、独特の対話型UIのため特に(シェルスクリプトから実行)アクションに引き継ぐマジック変数の扱いが良く理解出来ませんでした。 今回、ファイル操 ...

Act
3
シェルスクリプトを実行

このアクションは、前述した「CSV化・bashコード」を起動する様にします。 シェルはbash又はzsh Scriptを選択します。
このアクションが実行されると、ffprobeで解析した結果をデスクトップの BitRate_CSV.csv に保存します。

【キー・ポイント】
4行目の input= には、Act 2 で出力されたマジック変数[ファイル (ファイルパス)]を入力します。 このマジック変数のプロパティは、このマジック変数をクリックして、ファイルパスを選択します。

 

Act
4
メニューから選択

このアクションは、Numbersを起動させるか? 直ぐにビットレート変動を確認したいか?を選びます。 選ばれた項目に従って処理を分岐します。

1)Numbersで統計処理やグラフ作成を行う:が選択された場合 Act 5 を実行する

Act
5
アプリを開く

このアクションは、デスクトップの BitRate_CSV.csv を指定してNumbers アプリを開きます。 下に示すように、Numbers上で統計計算や散布図によるビットレート変動・グラフも作成することができます。

Act
6
このショートカットを停止

このアクションは、ショートカットを停止します。 このアクションを設けないとNumbersが起動した後ショートカットが起動したままになることを防ぎます。

 

2)直ぐにビットレート変動を確認する:が選択された場合 Act 7 を実行する

Act
7
ファイル

このアクションは、デスクトップの BitRate_CSV.csv を指定します。 このアクションで指定されたファイルパスなどがマジック変数として出力されます。

 

Acti
8
シェルスクリプトを実行

このアクションは、以前の記事で作成した「CSVファイルをPythonでグラフ化」のScriptの一部を利用してPythonグラフを起動する様にします。 シェルはPython3 を選択します。
このアクションが実行されると、デスクトップの BitRate_CSV.csv をPythonグラフに表示します。

【キー・ポイント】

  1. 10行目の csv_path = には、Act 7 で出力されたマジック変数[CSVファイル (ファイルパス)]を入力します。 このマジック変数のプロパティは、このマジック変数をクリックして、ファイルパスを選択します。
  2. 43行目の file_path = には、Act 2 で出力されたマジック変数[ファイル (ファイルパス)]を入力します。 このマジック変数のプロパティは、このマジック変数をクリックして、ファイルパスを選択します。

以上で【音声ファイル:ビットレート解析】ショートカットの完成です。 
▶を押すとショートカットが起動します。

 

 

以上、ffprobeを使って音声ファイルをフレーム単位でCSV化する紹介し、更にmacOsショートカットアプリを活用化したビットレート変動を可視化するオールインワンツールを紹介しました。 

 

スポンサーリンク