ffmpeg で動画の再生速度を変更して再出力する

手順は次の通り:

  1. ffmpeg を使って動画を yuv 形式に変換する
  2. ffmpeg を使って,yuv を,再生速度を指定して元の形式に変換する

yuv にすると再生速度やビットレート,画像サイズなどの情報が取り除かれる.それを利用して,yuv から元の形式に戻すときにビットレート・画像サイズは元の動画と同じものを指定し,再生速度だけを違うものに指定することで,再生速度を変更した動画を作成できるというわけ.

以下,元動画を movie.mov とし,変換先動画を movie2.mov として,元動画のサイズは 480x320, fps 60, ビットレート 6000kb とした場合の10倍速動画の生成例を記述する.

手順1. yuv への変換

ffmpeg -i movie.mov movie.yuv

手順2.yuv から元動画への変換

ffmpeg -s 480x320 -pix_fmt yuv420p -r 600 -i movie.yuv  -s 480x320 -b 6M -an -r 600 movie2.mov


オプションの説明:
-s: 入出力動画のサイズ. 両方とも合わせる
-pix_fmt: 「フォーマットがわかりません」的なエラーが出た時にこれを指定する
-r: フレームレート*倍速したい数.元の動画が60なら600にすれば10倍速になる
-b: 出力先のビットレート.小さいと画像がノイズだらけになる
-an: オーディオを無視


この方法の利点:
iMovieなどを使って速度変更した場合の,画像サイズが勝手に4:3のアスペクト比になってしまうのを回避できる.


参考: