確認した環境
- ffmpeg 4.2
本題
H.264形式の動画を生成するときにキーフレームの間隔を指定したいときがあるかもしれません。
(例えばストリーミング再生用に変換する際に、セグメントの秒数を指定したいときなど)
その場合、以下のようにx264-params
のkeyint
パラメータから設定します。単位はフレーム数です。
ffmpeg -i input.mp4 -vcodec h264 -x264-params keyint=150 out.mp4
または、g
で設定することも可能です。
ffmpeg -i input.mp4 -vcodec h264 -g 150 out.mp4
これで問題ない場合もあると思いますが、動画によってはこれでは上手くいかないケースもあります。
私が遭遇したケースでは、150フレームを指定したはずなのにデフォルトの250フレーム間隔で出力されたことがありました。
その場合は以下のようにmin-keyint
も設定すると解決することがあります。
ffmpeg -i input.mp4 -vcodec h264 -x264-params keyint=150:min-keyint=150 out.mp4
ffmpeg -i input.mp4 -vcodec h264 -g 150 -x264-params min-keyint=150 out.mp4
H.265形式でキーフレームの間隔を設定する場合
ちなみに、H.265形式でキーフレームの間隔を設定する場合はg
で設定する方法はありません。
x265-params
から設定する方法はあります。
ffmpeg -i input.mp4 -vcodec hevc -x265-params keyint=150:min-keyint=150 out.mp4
(2019/5/19追記)force_key_frames
を使用したキーフレームの間隔の設定(別記事)
以下の記事にて、force_key_frames
を使用したキーフレーム間隔の設定について書きました。
私が試した限りでは、force_key_frames
を使用する方法が一番うまくいくことが多かったです。
こちらもご参考ください。