†ぽんこつビデオ工房†
作成開始日 2025.05.21
最終更新日
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様)