通常はコーデック毎やエンコーダ毎にサンプル数が異なるがこれを任意の値に指定できるasetnsamplesフィルタの使い方。映像のフレーム毎の内容を音声と同期させるために使う。

基本コマンド

通常は他の解析関係のフィルタと併用する。以下はastatsフィルタを24000/1001fpsのフレーム数と同じサンプルフレームでログを出力する。
ffmpeg -i input -af asetnsamples=2002,astats=metadata=1:reset=1,ametadata=print:key=lavfi.astats.Overall.RMS_level:file=RMS_level.txt -f null -
ffprobe -v error -f lavfi -i amovie=input.mp4,asetnsamples=2002,astats=metadata=1 -show_entries packet_tags=lavfi.astats.Overall.RMS_level -of csv > output.csv
ffprobe -v error -f lavfi -i amovie=input.mp4,asetnsamples=2002,astats=metadata=1 -show_entries packet_tags=lavfi.astats.Overall.RMS_level -of csv | grep packet - > output.csv

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

オプション

  • nb_out_samples, n[int]
    音声コーデックの音声1フレームあたりのサンプル数の指定。既定値はコーデック毎の既定値になる。整数、分数、小数どれでも可能
  • pad, p[boolean]
    サンプルレートがnb_out_samples, nで指定した値で割りきれないときに最後のサンプル数を0で埋めて同じ数にする
    既定値:1

コーデック毎のサンプル数を調べる方法
ffprobe -v error -i input.mp4 -select_streams a:0 -show_entries packet=duration -read_intervals "%+#1" -of csv=p=0

動画のフレーム数に合わせたサンプル数の調べ方。

サンプルレート/fps
48000/(24000/1001) = 2002
48000/25 = 1920
48000/(30000/1001) = 1601.6
48000/(60000/1001) = 800.8

44100/(24000/1001) = 1839.3375
44100/25 = 1920 = 1764
44100/(30000/1001) = 1471.47
44100/(60000/1001) = 735.735

コメントを残す

メールアドレスが公開されることはありません。

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