長い録画は、分割すると扱いやすくなります。アップロードのサイズ上限に収めたいときや、章ごとに共有したいときに便利です。FFmpegなら、再エンコードせずに1つの動画を複数のパートに分割できます。画質は元のままで、処理は数秒で終わります。
1. 一定長のパートに分割する(segment マクサー)
動画を60秒ずつのパートに分けるには、segment マクサー(出力を一定の長さごとに別のファイルへ書き分ける機能)を使います。
ffmpeg -i input.mp4 -c copy -f segment -segment_time 60 -reset_timestamps 1 output_%03d.mp4
output_000.mp4、output_001.mp4、output_002.mp4… と、約60秒ずつのファイルができます。-c copy は再エンコードしない指定で、画質を落とさず速く処理できます。ほかのオプションの意味は次のとおりです。
| オプション | 意味 |
|---|---|
-f segment |
segment マクサーを使う |
-segment_time |
1パートの目標の長さ(秒) |
-reset_timestamps 1 |
各パートの時刻を0から始める |
%03d |
3桁の自動連番(000, 001, …) |
2. -reset_timestamps 1 が重要な理由
-reset_timestamps 1 を付けないと、各パートに元の動画の時刻(タイムスタンプ)がそのまま残ります。たとえば output_001.mp4 は0秒ではなく60秒から始まり、プレーヤーによっては再生前に長い空白が出ます。
付ければ、どのパートも 00:00:00 から始まり、それぞれ単体で普通に再生できます。特に理由がなければ、常に付けてください。
3. 開始時刻と長さで1パートだけ切り出す
1か所だけ欲しい場合(例:最初の60秒)は、segment マクサーを使いません。開始位置と長さを指定します。
ffmpeg -ss 00:00:00 -t 60 -i input.mp4 -c copy output_part1.mp4
-ss 00:00:00… 開始位置(ここでは先頭)-t 60… その位置から60秒分-c copy… 無劣化コピー
途中を切り出すときは、開始時刻を変えます。2:00から3:00までなら次のとおりです。
ffmpeg -ss 00:02:00 -t 60 -i input.mp4 -c copy output_part2.mp4
終了時刻で指定する -to などは、動画のトリミングを参照してください。
4. キーフレーム精度 — カット位置が決まる理由
-c copy で分割するとき、FFmpegはキーフレーム(Iフレームとも呼ぶ。それだけで1枚の画像に戻せるフレーム)の位置でしか切れません。キーフレームとキーフレームの間で切るには、再エンコードが必要です。segment マクサーは、指定した時刻ちょうどか、それ以降のキーフレームで切ります。そのため、パートの開始が指定時刻より少し遅れることがあります。
| 方法 | カット精度 | 速度 | 画質 |
|---|---|---|---|
-c copy(ストリームコピー) |
キーフレーム単位 | 高速 | 無劣化 |
| 再エンコード | フレーム単位 | 遅い | 再エンコードされる |
たとえば60秒のつもりのパートが、キーフレームの位置しだいで58秒や62秒になることがあります。たいていの用途は、これで困りません。フレーム単位で正確に切りたいときは、再エンコードします(次章)。仕組みはFFmpegの Seeking wiki にあります。
5. 正確な時刻で分割する(再エンコード)
速さより正確さが大事なときは、-c copy を外して再エンコードします。どのフレームでも分割できます。
ffmpeg -ss 00:00:30 -t 30 -i input.mp4 -c:v libx264 -crf 18 -c:a aac output_exact.mp4
-c copyがないので、FFmpegはデコードしてから再エンコードする。そのため 00:00:30 ちょうどから始められる-crf 18… 画質の指定。小さいほど高画質で、ファイルは大きくなる
時間はかかりますが、フレーム単位で正確に切れます。
6. トラブルシューティング
症状1: パートの冒頭に黒画面やフリーズが数フレーム入る
原因: -c copy では、映像はキーフレームからしか始まりません。-ss を -i の後ろに書いてキーフレームでない位置で切ると、次のキーフレームまで映像がなく、音声だけが先に流れます(segment マクサーのパートは、必ずキーフレームから始まります)。
解決策: -ss は第3章のように -i の前に書きます。正確な位置から始めたいときは、再エンコードします(第5章)。
症状2: 各パートの開始時刻がおかしい
原因: -reset_timestamps 1 がないため、元の時刻が残っています。
解決策: segment のコマンドに -reset_timestamps 1 を足します(第1章)。
症状3: Invalid segment filename template と出て、何も書き出されない
原因: 出力ファイル名に %03d などの連番がありません。segment マクサーは、連番のない名前では1つもファイルを作らずに止まります。
解決策: 出力名に %03d などの連番を入れて、パートごとに別の名前にします。
よくある質問
Q1. 分割すると画質は落ちますか?
A. -c copy なら落ちません。映像と音声のデータをそのままコピーするからです。画質が変わるのは、第5章の再エンコードの場合だけです。
Q2. 時間ではなくファイルサイズで分割できますか?
A. segment マクサーで指定できるのは、-segment_time(時間)と関連するオプションです。時間で分けるのが確実です。サイズに上限があるなら、上限に収まる長さを指定してください。
Q3. 60秒のはずのパートが62秒になるのはなぜですか?
A. -c copy では、segment マクサーが指定した時刻ちょうどか、それより後の最初のキーフレームで切るため、長さが多少前後します。正確な長さが必要なら、再エンコード(第5章)してください。
Q4. 分割したパートを後で結合できますか? A. できます。方法は動画の結合を参照してください。
Q5. MKVやMOVでも使えますか?
A. 使えます。segment マクサーは、コンテナの種類を問いません。出力名の拡張子を変えるだけです(例:output_%03d.mkv)。