[FFmpeg] 動画をカット・トリミング・切り出しする方法

先頭をカット (トリミング) する

-ss オプションのあとにカットしたい時間を指定します。

ffmpeg -ss [時間] -i INPUT.mp4 -c copy OUTPUT.mp4

-ss を使った出力のイメージ》

-ss は動画の開始ポイントを任意の位置に移動(シーク)するオプションです。

動画ファイルの開始ポイントを移動させて、ポイントから最後までを出力させることで冒頭から指定した時間までをカットしています。

出来上がった動画の冒頭部分に乱れがある場合は -c copy を外して再エンコードしてください。
参考: 先頭カットした動画データにずれがあるとき

最後 (末尾) をカットする

-to または -t オプションを使って動画ファイルの末尾をカットすることができます。
(※-to-t は排他的な関係で、同時に指定した場合 -t が優先されます)

-to を使う場合 (終了時間を指定)

ffmpeg -to [時間] -i INPUT.mp4 -c copy OUTPUT.mp4

-to オプションを使うと、指定された時間で書き込みや読み取りを停止します。(以降は破棄されます)

-to を使った出力イメージ

-t を使う場合 (書き出し時間を指定)

ffmpeg -t [時間] -i INPUT.mp4 -c copy OUTPUT.mp4

-t オプションはファイル入力(-i)のに指定されたとき、指定された時間までを出力します。(以降は破棄されます)

-t を使った出力イメージ

先頭と末尾をカットする

-ss で任意の時間にシークさせて、-to-t などの出力期間を指示することでファイルの先頭と末尾をカットすることができます。

-ss-to を使う場合 (始点と終点)

-to を使用する場合には、動画の先頭からみた終了時間 を指定します。
「ここまでほしいけど、はじめのここはいらない!」 などの場合に使うと良いです。

ffmpeg -ss [時間] -to [時間] -i INPUT.mp4 -c copy OUTPUT.mp4

-ss-to を使った出力イメージ

-ss-t を使う (始点と期間)

-t を使う場合、書き出したい時間 を指定します。
「ここから、このくらいほしいな!」 というときに使うと便利です。

ffmpeg -ss [時間] -i INPUT.mp4 -t [時間] -c copy OUTPUT.mp4

-ss-t を使った出力イメージ

先頭カットした動画データにずれがあるとき

エンコードなし(コマンドに -c copy を入れている状態)で動画を切り取った場合、キーフレームの関係で映像が止まって見えたり、真っ黒になってしまったりする現象が発生します。

この現象を避けてカットすることはいまのところ難しいようです。

きれいにトリミングやカットをしたい場合は、コマンドから -c copy を外して再エンコードしてください。(※処理に少し時間がかかります)

ffmpeg -ss 50 -i INPUT.mp4 OUTPUT.mp4

なぜうまくカットできないのか

-ss を使って動画の始点ポイントを移動させたとき、実際は指定した時間の近くに移動しています。
そのため、先頭がカットされた動画の開始に映像の乱れが生じることがよくあります。

適当なカットで十分な場合は放っておいても特に問題ありません。
きれいに表示してもらいたい場合は再エンコードします。(再エンコードすることで乱れた部分がきれいに調整されます)

時間指定の仕方

時間の指定は2つのパターンで指定することができます。

参考: FFmpeg Utilities Documentation (#Time duration)

[HH:]mm:ss (時間)

「HH」は時間(省略可)、「mm」は分、「ss」は秒を最大2桁で表します。

ffmepg -ss 1:05:00 -i INPUT.mp4 OUTPUT.mp4

S[.m] (秒)

「S」は秒数を表します。オプションで小数「m」も付けられます。

ffmepg -ss 180 -i INPUT.mp4 OUTPUT.mp4