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

727
Alexander Pospischil

Через пару дней я столкнулся с проблемой с ffmpeg, которая фактически сводит меня с ума ... Я пытаюсь использовать фильтр filter_complex от FFMPEG для извлечения определенных коротких сегментов видеофайла (с частотой 60 кадров в секунду). Я знаю точные кадры из оригинального материала, который я хочу использовать для вырезания. Я использую команду трим- фильтра вместе с setpts, если я хочу изменить скорость каждого фрагмента. В реальном случае я хочу получить первый фрагмент с исходной скоростью (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] [х] [30] [х] [32] [х] ... [80]

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

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

1

1 ответ на вопрос

0
Gyan

использование

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, частота кадровых падений не всегда соответствует ожидаемой.

Это похоже на работу! Большое спасибо @Mulvya Alexander Pospischil 6 лет назад 0

Похожие вопросы