ビデオにスローモーション効果を使用しようとしています。 2分の長さのビデオがあり、このエフェクトを20〜30秒の間に使用したいとします。
私はブログからこのコマンドを見つけました:
ffmpeg -i input.mp4 -vf "setpts=(<speed>/1)*PTS" output.mp4
しかし、私はそれに期間を実装する方法がわかりません。
setpts
フィルターには、他のいくつかのフィルターのような タイムライン編集 機能がありません(どれが機能するかについては、ffmpeg -filters
を参照してください)。
これは、遅いビデオを作成し、それを通常の速度のビデオに連結するか、いくつかの凝ったフィルタリングを実行する必要があることを意味します。
trim
、 setpts
、および concat
フィルターの使用:
この例の入力の持続時間は60秒です。 0-10は通常の速度、10-30は50%遅くなり、30-endは通常の速度になり、出力は最大80秒になります。
ffmpeg -i input.mkv -filter_complex \
"[0:v]trim=0:10,setpts=PTS-STARTPTS[v1]; \
[0:v]trim=10:30,setpts=PTS-STARTPTS[v2]; \
[0:v]trim=start=30,setpts=PTS-STARTPTS[v3]; \
[v2]setpts=PTS/0.5[slowv]; \
[v1][slowv][v3]concat=n=3:v=1:a=0[out]" \
-map "[out]" output.mp4
ffmpeg -i input.mkv -filter_complex \
"[0:v]trim=0:10,setpts=PTS-STARTPTS[v1]; \
[0:v]trim=10:30,setpts=PTS-STARTPTS[v2]; \
[0:v]trim=start=30,setpts=PTS-STARTPTS[v3]; \
[0:a]atrim=0:10,asetpts=PTS-STARTPTS[a1]; \
[0:a]atrim=10:30,asetpts=PTS-STARTPTS[a2]; \
[0:a]atrim=start=30,asetpts=PTS-STARTPTS[a3]; \
[v2]setpts=PTS/0.5[slowv]; \
[a2]atempo=0.5[slowa]; \
[v1][a1][slowv][slowa][v3][a3]concat=n=3:v=1:a=1[v][a]" \
-map "[v]" -map "[a]" output.mp4
あるいは、 slowmoVideo を試すこともできます。これにより、ffmpegのみと比較して見栄えの良いスローダウン効果が得られる可能性があります(slowmoVideoはffmpegを使用します)。また、ベジェ曲線を使用して効果をプロットできるため、効果をスムーズに開始でき、モーションブラーを含めることができます。