通常はコーデック毎やエンコーダ毎にサンプル数が異なるがこれを任意の値に指定できる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 > 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 = 1764 44100/(30000/1001) = 1471.47 44100/(60000/1001) = 735.735