ffmpegを使用してビデオから複数のスクリーンショットを抽出する方法を示す多くのチュートリアルやものがあります。-rを設定すると、一定量を開始することもできます。
しかし、たとえば01:23:45インチで1つのスクリーンショットが欲しい、または86%インチで1つのスクリーンショットが欲しい。
これはffmpegthumbnailerですべて可能ですが、依存したくない別の依存関係です。私はffmpegでそれができるようになりたいです。
ffmpegを使用してビデオから複数のスクリーンショットを抽出する方法を示す多くのチュートリアルやものがあります。-rを設定すると、一定量を開始することもできます。
しかし、たとえば01:23:45インチで1つのスクリーンショットが欲しい、または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は試すのに適した範囲です。
選択フィルタは、などの選択のみ、特定のフレームタイプ、または100当たり1、などのより複雑なニーズのための別の方法を提供します
-ss
入力の前に配置すると、より高速になります。FFmpeg Wiki:Seekingとffmpeg
cliツールのドキュメントからのこの抜粋を参照してください。
-ss
位置(入力/出力)入力オプションとして(の前に
-i
)使用すると、この入力ファイル内で検索して配置します。ほとんどのフォーマットでは正確にシークすることができないため、ffmpeg
位置の前の最も近いシークポイントにシークします。トランスコーディング-accurate_seek
が有効になっている場合(デフォルト)、シークポイントと位置の間のこの余分なセグメントはデコードされて破棄されます。ストリームコピーを行う場合-noaccurate_seek
、またはを使用する場合 は、保持されます。出力オプション(出力ファイル名の前)として使用される場合、タイムスタンプが所定の位置に到達するまで入力をデコードしますが破棄します。
位置は秒単位または
hh:mm:ss[.xxx]
形式のいずれかです。
vframes
は(少なくとも)バージョン4.2.2で廃止されていることに注意してください。マニュアルによると「[ vframes
]は ' -frames:v
'の古いエイリアスであり、代わりに使用する必要があります。」
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]
か、秒数として。パーセンテージが必要な場合は、事前にビデオの長さを計算する必要があります。
ffmpeg -ss 01:23:45 -i video.mp4 -c:v png -frames:v 1 image.jpg
。他の人が推奨しているように、コマンドラインで入力ファイルの前に-ss
「seek」オプションも配置していることに注意してください。