web-dev-qa-db-ja.com

ffmpegで特定の時間間隔でスローモーション効果を使用する方法

ビデオにスローモーション効果を使用しようとしています。 2分の長さのビデオがあり、このエフェクトを20〜30秒の間に使用したいとします。

私はブログからこのコマンドを見つけました:

ffmpeg -i input.mp4 -vf "setpts=(<speed>/1)*PTS" output.mp4

しかし、私はそれに期間を実装する方法がわかりません。

4
iwocan

setptsフィルターには、他のいくつかのフィルターのような タイムライン編集 機能がありません(どれが機能するかについては、ffmpeg -filtersを参照してください)。

これは、遅いビデオを作成し、それを通常の速度のビデオに連結するか、いくつかの凝ったフィルタリングを実行する必要があることを意味します。

例:ビデオのみ

trimsetpts 、および 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

あるいは、 slowmoVideo を試すこともできます。これにより、ffmpegのみと比較して見栄えの良いスローダウン効果が得られる可能性があります(slowmoVideoはffmpegを使用します)。また、ベジェ曲線を使用して効果をプロットできるため、効果をスムーズに開始でき、モーションブラーを含めることができます。

7
llogan