Ffmpegを使用してビデオから複数のスクリーンショットを抽出する方法を示す多くのチュートリアルと資料があります。 -rを設定すると、一定量を開始することもできます。
しかし、スクリーンショットを1つだけ、たとえば01:23:45インチで欲しいです。または、86%インチで1つのスクリーンショットが必要です。
これは ffmpegthumbnailer ですべて可能ですが、これは依存したくない別の依存関係です。 ffmpegでできるようにしたいです。
-ss
オプションを使用します。
ffmpeg -ss 01:23:45 -i input -vframes 1 -q:v 2 output.jpg
JPEG出力の場合は、-q:v
を使用して出力品質を制御します。フルレンジは1〜31の線形スケールで、値が小さいほど品質が高くなります。 2〜5を試してみてください。
select filter は、特定のフレームタイプのみを選択する、または100に1つなど、より複雑なニーズに対応する代替方法を提供します。
入力の前に-ss
を配置すると速くなります。 FFmpeg Wiki:Seeking および ffmpeg
cliツールのドキュメント からのこの抜粋を参照してください。
-ss
位置(入力/出力)入力オプションとして(
-i
の前に)使用する場合、この入力ファイル内で位置を探します。ほとんどの形式では正確にシークできないため、ffmpeg
は位置の前の最も近いシークポイントをシークします。トランスコーディングおよび-accurate_seek
が有効な場合(デフォルト)、シークポイントと位置の間のこの余分なセグメントはデコードされ、破棄されます。ストリームコピーを行うとき、または-noaccurate_seek
が使用されるとき、それは保持されます。(出力ファイル名の前に)出力オプションとして使用する場合、タイムスタンプが位置に達するまで入力をデコードしますが破棄します。
位置は、秒単位または
hh:mm:ss[.xxx]
形式のいずれかです。
FFMpegは、指定されたタイムスタンプを検索し、ちょうど1つのフレームをイメージとして抽出することでこれを実行できます。たとえば、以下を参照してください。
ffmpeg -i input_file.mp4 -ss 01:23:45 -vframes 1 output.jpg
オプションについて説明しましょう。
-i input file the path to the input file
-ss 01:23:45 seek the position to the specified timestamp
-vframes 1 only handle one video frame
output.jpg output filename, should have a well-known extension
-ss
パラメーターは、HH:MM:SS[.xxx]
形式の値または秒単位の数値を受け入れます。パーセンテージが必要な場合は、事前にビデオ時間を計算する必要があります。