Jak używać efektu zwolnionego tempa w określonym przedziale czasu za pomocą ffmpeg

4

Próbuję użyć efektu zwolnionego tempa w moich filmach. Załóżmy, że mam wideo trwające 2 minuty i chcę użyć tego efektu od 20 do 30 sekund.

Znalazłem to polecenie z bloga:

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

Ale nie wiem, jak wprowadzić w to czas trwania.

iwocan
źródło

Odpowiedzi:

7

setptsFiltr nie posiada osi czasu edycji funkcjonalność jak w niektórych innych filtrów (patrz ffmpeg -filtersaby zobaczyć, które robią).

Oznacza to, że będziesz musiał zrobić wolne wideo i połączyć je z normalnymi filmami prędkości lub wykonać fantazyjne filtrowanie.

Przykład: tylko wideo

Używanie trim, setptsoraz concatfiltry:

Dane wejściowe w tym przykładzie trwają 60 sekund. 0-10 będzie normalną prędkością, 10-30 będzie o 50% wolniejszą, a 30-koniec będzie normalną prędkością, co da wynik o czasie trwania ~ 80 sekund:

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

Przykład: z dźwiękiem

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

Alternatywnie możesz wypróbować slowmoVideo, które prawdopodobnie skutkuje lepszym efektem spowolnienia w porównaniu do samego ffmpeg (slowmoVideo używa ffmpeg). Pozwala także używać krzywych Béziera do kreślenia efektu, dzięki czemu można płynnie inicjować efekt, a także może obejmować rozmycie ruchu.

Llogan
źródło
Nie musisz używać setpts = PTS-STARTPTS dla strumienia v1, prawda?
ptQa
nie otrzymuję dźwięku za pomocą powyższego polecenia
Karandeep Atwal
@KarandeepAtwal Dodano przykład z dźwiękiem.
llogan