web-dev-qa-db-ja.com

特定の時間にffmpegでビデオのスクリーンショットを1つ抽出するにはどうすればよいですか?

Ffmpegを使用してビデオから複数のスクリーンショットを抽出する方法を示す多くのチュートリアルと資料があります。 -rを設定すると、一定量を開始することもできます。

しかし、スクリーンショットを1つだけ、たとえば01:23:45インチで欲しいです。または、86%インチで1つのスクリーンショットが必要です。

これは ffmpegthumbnailer ですべて可能ですが、これは依存したくない別の依存関係です。 ffmpegでできるようにしたいです。

79
Peter Bengtsson

-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]形式のいずれかです。

146
llogan

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]形式の値または秒単位の数値を受け入れます。パーセンテージが必要な場合は、事前にビデオ時間を計算する必要があります。

27
SirDarius