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チェックサム