0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

FFmpeg で keyframe でカットする方法

Posted at
  • 対象のストリームの codeccopy に設定
  • -ss を入力オプション (-i の前) として使用
  • -ss に設定する時刻を
    キーフレームと同じ (か、次の frame までの間の) timestamp に設定
  • -to に設定する時刻を keyframe と同じ timestamp に設定 (後述)

公式ドキュメント -ss <位置> の説明

ffmpeg Documentation

要約

原文の和訳

入力オプション (-i の前) として使用すると、この入力ファイル内で position を検索します。
ほとんどの形式では正確に seek することができないため、
ffmpeg は positionの前に最も近い seek point まで seek することに注意してください。
トランスコーディングと -accurate_seek が有効になっている場合 (デフォルト)、
seek pointposition の間のこの余分なセグメントは decode されて破棄されます。
stream の copy を実行する場合、
または -noaccurate_seek が使用される場合、
stream は保持されます。

出力オプション (出力 URL の前) として使用すると、
decode しますが、timestamp がその position に達するまで入力を破棄します。
positiontime duration の形式でなければなりません。
ffmpeg-utils(1) マニュアルの (ffmpeg-utils) time duration セクション を参照してください。

FFmpeg wiki の説明

Seeking – FFmpeg

出力オプションとして -ss を設定すると再エンコードされます

Here, the input is decoded(and discarded) until it reaches the position indicated by -ss.

入力と出力両方に -ss を設定する意味なし

動作はするが用途不明

Semantically valid, but mostly useless.

-to に設定する時刻を keyframe と同じ timestamp に設定する方法

説明が長くなるので概要のみ記載、1度に行うには何らかのプログラムによる自動化が必要

  1. まず FFmpeg でカット対象動画ファイルの PTS time を 0 から振り直し
    (PTS time が 0 から始まっていない場合があるため)
  2. FFprobe で keyframe の PTS time 一覧を取得
  3. 一覧の中からカットしたい位置の keyframe の PTS time を選択して -to に設定
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?