ffmpegを使って動画の再生速度を変えてみます。
映像の方は setpts を使って絵を表示するタイミングを書き換えます。
音声は音程を維持したまま速度を変える atempo フィルタを使う方法と、速度に応じた音程(速度を上げればきゅるきゅる音)になる asetrate を使ったサンプルレートの書き換えの方法があります。
音声の音程が変わらない速度調節:音程が変わらないといっても速度変化が大きい場合はそれなりに違和感はでます。
2倍速の場合
ffmpeg -i src.mp4 -vf setpts=PTS/2.0 -af atempo=2.0 dest.mp40.8倍速の場合
ffmpeg -i src.mp4 -vf setpts=PTS/0.8 -af atempo=0.8 dest.mp4(src.mp4:変換元の動画 dest.mp4:変換後の動画)
atempo が処理できるパラメータが0.5~2.0の範囲なので 0.5倍速~2.0倍速の間で使える方法ですね。
でも atempo フィルタを重ねることでそれ以上の倍率もできないことはないです(音質的には崩れてきますが)
4倍速
ffmpeg -i src.mp4 -vf setpts=PTS/4.0 -af atempo=2.0,atempo=2.0 dest.mp48倍速
ffmpeg -i src.mp4 -vf setpts=PTS/8.0 -af atempo=2.0,atempo=2.0,atempo=2.0 dest.mp4音声の音程が変化する速度調節:速度を上げると音声もきゅるきゅる~って感じで音程が高くなる速度調節です。
2倍速
ffmpeg -i src.mp4 -vf setpts=PTS/2.0 -af asetrate=48000*2.0 -ar 48000 dest.mp4上のコマンドの48000の部分は元の音声のサンプルレートを指定します。元のレートがわからないとasetrateでセットするサンプルレートが計算できません。元と違うサンプルレートを指定すると音声が映像に対してずれていきます。
事前にサンプルレートがわからない場合は、強制的にリサンプルして変換する方法もあります。このほうがお手軽かもしれません。
48000Hzにリサンプル後、2倍速処理
ffmpeg -i src.mp4 -vf setpts=PTS/2.0 -af aresample=48000,asetrate=48000*2.0 -ar 48000 dest.mp40.5倍速
ffmpeg -i src.mp4 -vf setpts=PTS/0.5 -af aresample=48000,asetrate=48000*0.5 -ar 48000 dest.mp4上記コマンドなら元の音声のサンプルレートを気にせず倍率の部分を好きな数字に変えるだけで対応できます。
スポンサーサイト