固定フレーム数に基づいてビデオvideo.avi
(フレームの総数などN
)を連続チャンクに分割しようとしていますM = 100
。具体的には、このプロセスでは以下を生成する必要があります。
video_0.avi
:フレーム0〜M-1
video_1.avi
:M
フレーム2M-1
video_2.avi
:2M
フレーム3M-1
- ...
重要なことは、各ブロックにvideo_*.avi
正確なM
フレームがあることです。したがってN
、分割できない場合、最後のチャンクは破棄される可能性がありますM
。
関連する質問が見つかりました(例:ffmpegを使用してビデオファイルを複数のセグメントに分割する)しかし、標準を置き換えるために苦労していることがわかりました。第二そしてフレーム。
答え1
最初のブロックの場合は使用でき、大丈夫でしょう(覚えてい-vframes M-1
ても)。-c copy
他のブロックはよりトリッキーで成功しませんでした。
-vf 'select=gte(n\,M)'
- とにかく再エンコードする必要がありますが、別のコーデックを使用すると奇妙なことが発生します。たとえば、前の期間を静止フレームとして残してサウンドを再生するなどの問題が発生します。 ..
$fps
たとえば、FPSがあり、Mが次の場合、フレーム数をFPSで割って時間を秒単位で取得できます$M
。
ffmpeg -i video.avi -ss `echo "scale=6; $M / $fps" | bc` -to `echo "scale=6; (2 * $M) / $fps" | bc` video_01.avi
など。これらの時間を計算するスクリプト言語があれば、より簡単です。また、再エンコードする場合(例:なし-c copy
)が正しいことに注意してください。以下も参照してください-ss
。-to
https://superuser.com/questions/459313/how-to-cut-at-exact-frames-using-ffmpeg