特定の間隔(20フレーム)に基づいてキーフレームをビデオに追加したい。
したがって、私はffmpeg
で次のコマンドを使用しました。
ffmpeg -i <input> -vcodec libx264 -x264-params keyint=20:scenecut=0 -acodec copy out.mp4
出力は、20フレームごとにキーフレームを取得することです。
しかし、元のビデオにはキーフレームがありました。 frame 1, 12, 89....
今、フレーム1, 21, 41....
にキーフレームがあります
すでにあったキーフレームを入れ替えたくない。キーフレームを追加したいので、次のようにします。
frame 1, 12, 21, 41, 89....
これどうやってするの?
短い答え:できません
長い答え:FFMpegを再エンコードで使用する場合(つまり、copy
以外のコーデック)、入力ストリーム内のすべての画像が解凍され、完全なビットマップとして使用できます。これは、パイプラインのこの時点で、フレーム1、12、および89がもはや「特別」ではないことを意味します。これらは他のイメージと同じです。
libx264
を介して圧縮すると、キーフレームを含むビデオが作成されます。これらは、設定した場所に配置されます。この場合、20フレームごとに配置されます。
force_key_frames
には、ソースストリームのキーフレームケイデンスをミラーリングするオプションがあります(まだ文書化されていません-私のtodoでは)。ただし、これをf_k_fの他の式と組み合わせることはできません。
ただし、使用できるのは
-force_key_frames source -x264-params keyint=20:scenecut=0
ソースフレームがキーフレームの場合、これによりキーフレームが設定されます。ただし、keyintは常に最後のキーフレームセットから測定されるため、ソースのn=0,34,55,64
にKFがあった場合、結果にはn=0,20,34,54,55,64,84
のKFがあります-40,60,80
にKFがないことに注意してください。また、54,55
の連続するKFにも注意してください。ソースKFを無視して、シーンカットを機能させるのが最善です。