ffmpeg で先頭と後ろを一度にカットする


Cut video with ffmpeg. – Stack Overflow より、再エンコードなしに1行のコマンドで先頭と後ろをカットする方法。

開始10秒と後ろ10秒をカットしてその間をコピー出力する
ffmpeg -ss 10 -i video.mp4 -ss 20 -i video.mp4 -c copy -map 1:0 -map 0 -shortest -f nut - | ffmpeg -f nut -i - -map 0 -map -0:0 -c copy out.mp4

  • このコマンドの挙動の理解には shortest, map, nut を知る必要がある
  • -shortest は2入力以上に対応していないので、1入力のトラックの中から一番短いファイル時間でカットされる
  • 1番目の -ss で動画の先頭時間の指定、2番目の -ss と1番目の -ss の差し引きが後ろをカットする時間になる
  • -map 1:0 -map 0 を使ってそれらを1入力扱いにして、そのトラックに中から -shortest で一番時間の短いところで出力時間が決まる
  • なぜ -map 1:0 を先にするかというと、この映像はカットするための時間を決める動画で最終出力には不要になりかつ、トラックを除外しやすい -map 0:0 でパイプ入力するため
  • -f nut はいろいろなコーデックをパイプ入出力できるので便利
  • パイプ入力で -map 0 しているのは映像と音声、または字幕などのすべてのデータを元に -shortest で後ろをカットするから
  • -map 0:0 で不要なトラックを除外して出力している

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)