Как вырезать отдельные кадры видео с помощью ffmpeg и преобразовать частоту кадров?

Как вырезать отдельные кадры видео с помощью ffmpeg и преобразовать частоту кадров?

уже пару дней как столкнулся с проблемой с ffmpeg, которая меня просто бесит... Я пытаюсь использовать filter_complex FFMPEG, чтобы извлечь некоторые короткие фрагменты видеофайла (снятого на 60 кадров в секунду). Я знаю точные кадры из исходного материала, которые хочу использовать для резки. Я используюподрезатькоманда фильтра вместе снастройки, если я хочу изменить скорость каждого фрагмента. В данном случае я хочу, чтобы первый фрагмент имел исходную скорость (1.0), а результирующее выходное видео было бы на 30 кадрах в секунду вместо исходных 60 кадров в секунду. Вот код, который я использую:

ffmpeg -y -i footage60fps -filter_complex " 
[0:v]trim=start_frame=28:end_frame=82,setpts=PTS-
STARTPTS,setpts=1.0*PTS[v0]; 
[0:v]trim=start_frame=10:end_frame=20,setpts=PTS-
STARTPTS,setpts=2.0*PTS[v1]; [v0][v1]concat=n=2:v=1:a=0[out] " -map [out] -
preset ultrafast -r 30 output30fps.mp4

Результат, которого я ожидаю, будет таким: в первом фрагменте (с кадра 28 до последнего перед кадром 82) ffmpeg будет отбрасывать каждый второй кадр ([x]), чтобы преобразовать его из 60 кадров в секунду в 30 кадров в секунду с нормальной скоростью: [28][x][30][x][32][x]...[80]

Однако результат, который я получаю: [28][29][30][31][x][33][x][35][x]...[81]

Кто-нибудь понимает это поведение? Как мне решить это? Кажется, что это незначительная проблема, но она оказывается такой раздражающей, когда резко обрывается музыка и т. д... Любая помощь будет высоко оценена!

решение1

Использовать

ffmpeg -y -i footage60fps -filter_complex " 
[0:v]trim=start_frame=28:end_frame=82,setpts=PTS-STARTPTS,framestep=2[v0]; 
[0:v]trim=start_frame=10:end_frame=20,setpts=PTS-STARTPTS,setpts=2.0*PTS[v1];
[v0][v1]concat=n=2:v=1:a=0[out]" -map [out] -r 30 -preset ultrafast output30fps.mp4

Я не изучал причины наблюдаемого вами поведения, но когда вы смешиваете потоки с разной скоростью, как в этом случае, с помощью фильтра concat и применяете соответствие скорости CFR, частота пропадания кадров не всегда соответствует ожидаемой.

Связанный контент