FFMPEGを使用してビデオファイルからスクリーンショットをキャプチャするにはどうすればよいですか?
方法1: `-vf`(ビデオフィルター)`スケール `および` select` を使用します
この方法は非常に柔軟性があり、タイムスタンプ、出力サイズ、および基準に基づいて特定のフレームを選択することもできます。
「バッシュ
ffmpeg -i input.mp4 -vf "select ='eq(n、10)'、scale =640:-1" -frames:v 1 output.png
`` `
* `-i input.mp4`:入力ビデオファイルを指定します。 `input.mp4`をビデオファイルの名前に置き換えます。
* `-vf" select ='eq(n、10)'、スケール=640:-1 "`:これはビデオフィルターチェーンです。
* `select ='eq(n、10)'`:11番目のフレームを選択します(nは0から始まります)。 `10`を変更して、別のフレームを選択します。 ここでは、より複雑な式を使用できます。たとえば、 `select ='gte(t、10)'`は、10秒以降のフレームを選択します。
* `スケール=640:-1`:アスペクト比を維持しながら、フレームを幅640ピクセルにサイズします。 `-1`は自動的に高さを計算します。必要に応じて幅と高さの両方を指定できます(例: `スケール=640:480`)。
* `-frames:v 1`:FFMPEGに1つのフレームのみを出力するように指示します。
* `output.png`:出力PNGファイルを指定します。 jpeg(output.jpg`)などの他の画像形式を使用できます。
方法2: `-vf`(ビデオフィルター)`サムネイル `を使用します
この方法は、ビデオの期間の特定の時間または割合で単一のサムネイルをつかむために簡単です。
「バッシュ
ffmpeg -i input.mp4 -vfサムネイル-frames:v 1 output.png
`` `
これは、ビデオのほぼ真ん中からサムネイルをつかみます。 正確な時間を指定するには:
「バッシュ
ffmpeg -i input.mp4 -vf "サムネイル、setpts =pts -startpts" -ss 10 -frames:v 1 output.png
`` `
* `-ss 10`:サムネイルをキャプチャする前に *ビデオに10秒を探します。 これは通常、特定の時間に「select」を使用するよりも効率的です。
方法3:複数のスクリーンショットに `-vf`(ビデオフィルター)と` fps`を使用
定期的に複数のスクリーンショットをキャプチャするには:
「バッシュ
ffmpeg -i input.mp4 -vf fps =1/5 output%03d.png
`` `
これにより、5秒ごとにスクリーンショット(1秒あたり1フレーム、または1/5 fps)、「output001.png」、 `output002.png`などに番号が付けられます。
重要な考慮事項:
* `-ss`配置: * `-i`の前に` -ss` *を配置すると、より高速なシークが実行されます(入力ファイルでSIKESがあります)。 「-i`」の後に配置すると、ビデオ全体がシークポイントまでデコードされ、遅くなりますが、一部のビデオ形式ではより正確になる可能性があります。
* フレームレート: 実際のフレーム番号は、ビデオフレームレートの変動のため、タイムコードに完全に対応していない場合があります。
* ファイル形式: 出力ファイル拡張子を `.jpg`、` .jpeg`、 `.bmp`などに変更して、異なる画像形式を使用できます。
`input.mp4`および` output.png`を実際のファイル名に置き換えることを忘れないでください。ニーズに最適な方法を選択し、それに応じてパラメーターを調整します。 最初の方法は最もコントロールを提供しますが、他の方法はよりシンプルなタスクのために速くなります。