†ぽんこつビデオ工房†

ffprobeで動画情報を取得する

作成開始日 2025.05.21
最終更新日

動画ファイルの処理スクリプトを作成するとき、元の動画ファイルの情報が必要になる事がある。特に、無駄にデカいサイズの動画を縮小するときは、縦横サイズを自動取得できるとありがたい。このような場合、ffmpeg系のffprobeを使用すると良い。「ffprobe ファイル名」とすれば、「ffmpeg -i ファイル名」とほぼ同じ内容が出力される。したがって、その出力をgrepすれば必要な動画情報が得られる(Linuxの場合)。
ffprobe ファイル名 2>&1 | grep "Stream #0:0"

--出力例--
Stream #0:0: Video: vp9 (Profile 0), yuv420p(tv, progressive), 1280x720, SAR 1:1
DAR 16:9, 30 fps, 30 tbr, 1k tbn (default)
この出力行から適当な文字列操作で必要な情報(例えば1280x720)を切り出せば良い。

【参考】ffporbeもffmpeg同様、情報の出力先が標準出力(1)ではなく、標準エラー出力(2)であるため、上記のようなリダイレクト「2>&1」が必要になる。

さらに、ffprobeには動画情報を個別項目ごとに取り出す機能(-show_entries)も用意されている。たとえば、動画の縦横サイズ(height、width)を直接抜き出すには、以下のようにする。恐らく、こちらの形式の方が後の処理は簡単だろう。
ffprobe ファイル名 -show_entries stream=width,height 2>&1 | grep -e width -e height

--出力例--
width=1280
height=720

【補足】grepの「-e」はORに相当;「grep -e 文字列1 -e 文字列2」で「文字列1 or 文字列2」検索になる。

ここで問題になるのが「stream=width,height」の部分。動画情報は種類毎に分類されていて、それぞれ「セクション」という形でまとめられている。この例では、「stream」セクション内の「width」と「height」という項目を指定している。

セクションにはstreamの他に、format、stream、program等々があるようだ。各セクションに含まれる項目は、-show_format、-show_streams、-show_programs等で確認できる(末尾のsに注意)。一般的に必要とされる情報は、多分formatかstreamのどちらかに入っていると思う。

【参考文献】ffprobeで動画を解析する(@hapoon様)


【ぽんこつビデオ工房目次】 【ホーム】