PTSやピクチャータイプやピクセルフォーマット、ピクセル値などを調べるのに使うshowinfo、ashowinfoフィルタの使い方。一般的な使い方はffplayで再生してコンソールに情報を流しながら見るもので、得た情報のメタデータを他のフィルタに渡すことは今のところできない。

メタデータを扱えるffmpegは個人のレポジトリにある:
libavfilter/vf_showinfo.c: Add metadata mode · cho-dev/FFmpeg-jwmod@b9e9219

基本コマンド

ffplay -i input -vf showinfo=1
ffplay -i input -af ashowinfo

ログをコンソールに流さずにテキストで保存する。
ffmpeg -report -i input -vf showinfo -an -f null - > nul 2>&1

先にFFREPORTでファイル名とデバグレベルを指定するとログのファイル名が指定できる。
set FFREPORT=file=showinfo.log:level=48

libx264、libx265のエンコードパラメータをコンソールに表示する。
ffmpeg -hide_banner -i input.mp4 -vf showinfo=udu_sei_as_ascii=1 -frames:v 1 -f null -

avfilter/vf_showinfo: add udu_sei_as_ascii option · FFmpeg/FFmpeg@56ca0f2 · GitHub

sei_user_dataにUUID+stringを書き込む。
ffmpeg -f lavfi -i testsrc2=d=1 -c:v libx264 -bsf:v h264_metadata="sei_user_data=dc45e9bde6d948b7962cd820d923eeef+x264 - core 164" output.mp4

remuxで修正することもできる。
ffmpeg -i output.mp4 -c copy -bsf:v h264_metadata="sei_user_data=abc5e9bde6d948b7962cd820d923eeef+x264 - core 163" edited.mp4

エンコードパラメータごとsei_user_dataを消すこともできる。
ffmpeg -i edited.mp4 -c copy -bsf:v filter_units=remove_types=6 del.mp4

ffmpeg – Properly fix videos which were encoded with old version of x264 – Super User

FFmpeg 7.0以降からはビットストリームフィルタでshowinfoフィルタが使えるようになった。
ffmpeg -i input -bsf:v showinfo -an -f null -

オプション

  • checksum[boolean]
    showinfoフィルタのみ。映像のチェックサム、ピクセル平均値、ピクセル標準偏差値を計算する。
    既定値:1
  • udu_sei_as_ascii[boolean]
    可能であればuser data unregistered SEIをASCII文字で表示し、それ以外は16進数で表示する
    既定値:0

公式ドキュメント:FFmpeg Filters Documentation : showinfo
公式ドキュメント:FFmpeg Filters Documentation : ashowinfo

解析内容

showinfo

  • n
    デコード開始からのフレーム番号。シークするとリセットされる。回避方法
  • pts
    PTS時間。よく見る時間はこれにタイムベースを掛けている
  • pts_time
    PTS時間。非表示になるときは取得できていないか、意味をなさないなど
  • pos
    デコード時点での累積ファイルサイズ
  • fmt
    ピクセルフォーマット名
  • sar
    サンプルアスペクト比
  • s
    映像の解像度。横x縦
  • i
    スキャンタイプ。(”P”はプログレッシブ。”T”はトップフィールドファースト。”B”はボトムフィールドファースト)
  • iskey
    キーフレームかどうか。0ならそれ以外
  • type
    ピクチャータイプ(”I”はI-frame。”P”はP-frame。”B”はB-frame。”?”は不明)
  • checksum
    Adler-32チェックサム
  • plane_checksum
    各チャンネルのAdler-32チェックサム
  • mean
    各チャンネルのピクセル平均値
  • stdev
    各チャンネルのピクセル標準偏差値
SAR、DARについて

SARには「Sample Aspect Ratio」(mpeg4-avc)と「Pixel Aspect Ratio」(mpeg2)の2つの意味がある。
DARは「Display Aspect Ratio」で、「幅と高さの比率」を定義している。
SAR = DAR / PAR
ffmpeg – what’s the difference between SAR & PAR in video (Detailed Info) – Super User

PTS、timebaseについて

ffmpeg でのフレームレート設定の違い
映像と音声の pts を扱う setpts, asetpts

ashowinfo

  • n
    デコード開始からのフレーム番号。シークするとリセットされる。回避方法
  • pts
    PTS時間。よく見る時間はこれにサンプリング周波数を割っている
  • pts_time
    PTS時間
  • pos
    デコード時点での累積ファイルサイズ
  • fmt
    サンプルフォーマット名
  • chlayout
    チャンネルレイアウト名
  • rate
    サンプリング周波数
  • nb_samples
    オーディオ1フレームあたりのサンプル数
  • checksum
    Adler-32チェックサム
  • plane_checksums
    各チャンネルのAdler-32チェックサム

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)