PTSを変更することで再生速度を上げたり下げたり、複数のファイルを合わせたりするときにPTSを揃えたりするのに使うsetpts、asetpts
フィルタの使い方。音声の速度変更にはrubberband
フィルタを使う方法もある。
サンプリング周波数を変えずにテンポとピッチを変える rubberband
FFmpeg 7.0からsetpts
フィルタを通して映像を出力するとフレームレートが25に上書きされるので、fps
フィルタか、出力オプションの-rとfps数、または-fps_mode passthroughを追加する。
Ffmpeg: concatenate videos and keep framerate the same – Super User
24000/1001 fpsで出力する例。
-vf setpts=PTS-STARTPTS,fps=24000/1001
-vf setpts=PTS-STARTPTS -r 24000/1001
lavf/vf_setpts: unset output framerate · FFmpeg/FFmpeg@f121d95 · GitHub
アニメGIFの速度調整は-itsscaleで1/倍速を小数で指定する。
再エンコードせずに fps を変更する
PTSとDTSの生成
CTS(Composition Time Stamp)について。
timestamp – Different PTS values in ffmpeg and MP4 CTS values obtained using ctts and stts – Stack Overflow
ffmpeg 4.4からはビットストリームフィルタでPTSを書き換えられるようになったので再エンコードコード不要で映像の再生速度を変更できる。
ffmpeg -i input -af "atempo=2" -bsf:v setts=ts=TS/2 -c:v copy output
出力フレームレートを29.97fpsに変更する。
ffmpeg -i video -bsf:v setts=dts=N/((30000/1001)*TB):pts=PTS+N/((30000/1001)*TB)-DTS -c:v copy output
公式ドキュメント:FFmpeg Bitstream Filters Documentation : setts
基本コマンド
PTSを0リセットする。
ffmpeg -i input -filter_complex setpts=PTS-STARTPTS -c:a copy output
再生速度を2倍にする。
ffmpeg -i input -filter_complex setpts=(PTS-STARTPTS)/2;atempo=2 output
再生速度を半分にする。
ffmpeg -i input -filter_complex setpts=2*(PTS-STARTPTS);atempo=0.5 output
【ffmpeg】倍速再生できる動画にエンコードする
2つの映像のPTSをリセットして縦に並べる。
ffmpeg -i input1 -i input2 -filter_complex [0:v]setpts=PTS-STARTPTS[v0];[1:v]setpts=PTS-STARTPTS[v1];[v0][v1]vstack output
公式ドキュメント:FFmpeg Filters Documentation : setpts, asetpts
Continue reading “映像と音声の pts を扱う setpts, asetpts”