FFMPEGと正確なフレーム数を使用してビデオファイルをチャンクに分割します。

FFMPEGと正確なフレーム数を使用してビデオファイルをチャンクに分割します。

固定フレーム数に基づいてビデオvideo.avi(フレームの総数などN)を連続チャンクに分割しようとしていますM = 100。具体的には、このプロセスでは以下を生成する必要があります。

  1. video_0.avi:フレーム0〜M-1
  2. video_1.avi:Mフレーム2M-1
  3. video_2.avi:2Mフレーム3M-1
  4. ...

重要なことは、各ブロックに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-tohttps://superuser.com/questions/459313/how-to-cut-at-exact-frames-using-ffmpeg

関連情報