Using ffmpeg to change framerate – Stack Overflowより、H.264, H.265 の映像を再エンコードせずにフレームレート(fps)を変更する方法。映像のフレームレートだけなので音声は再エンコードしないと速度を変えられない。音声の速度変更はatempo, rubberbandフィルタのどちらかを使う。

【ffmpeg】倍速再生できる動画にエンコードする
サンプリング周波数を変えずにテンポとピッチを変える rubberband

元映像のフレームレートよりも入力フレームレートを大きくすれば再生速度は速く、動画時間は短くなる。反対に入力フレームレートを小さくすれば再生速度は遅く、動画時間は長くなる。同様に本当のフレームレートが30000/1001なのに、30でエンコードされている動画の修正にも使える。

H.264 の場合。
ffmpeg -i input.mp4 -c copy output.h264
ffmpeg -r 12 -i output.h264 -c copy output.mp4
ffmpeg -r 36 -i output.h264 -c copy output.mp4

音声も合わせるなら映像の速度に合わせてatempoも揃える。
ffmpeg -r 36 -i output.h264 -i input.mp4 -filter_complex [1:a]atempo=1.5[a] -map 0 -c:v copy -map [a] -c:a aac output.mp4

H.265 の場合。
ffmpeg -i input.mp4 -c copy output.h265
ffmpeg -r 12 -i output.h265 -c copy output.mp4
ffmpeg -r 36 -i output.h265 -c copy output.mp4

video – Change framerate in ffmpeg without reencoding – Super Userより、-itsscaleを使う方法もある。こちらはH.264、H.265に限らず、VP9やAV1でもフレームレートを変えられる。

30を30000/1001に修正するには、30/(30000/1001)=1.001で少数を指定する。逆に音声フィルタはその逆数を指定する。
ffmpeg -itsscale 1.001001 -i input -af "rubberband=(30000/1001)/30" -r 30000/1001 -c:v copy -c:a aac -b:a 128k output.mp4

video – using ffmpeg to convert 60fps to 29.97fps without dropping frames – Super User

コメントを残す

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

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