Воспроизведение видео 60 кадров в секунду на скорости 30 кадров в секунду
У меня есть видео 60pps 1080p от GoPro, которое действительно воспроизводится в mpv (и других медиаплеерах). Как сделать так, чтобы mpv сбрасывал каждый второй кадр, чтобы получить более плавное видео?
В качестве альтернативы, есть ли быстрый способ конвертировать видео в 30 кадров в секунду?
2 ответа
Отвечая на эту часть вопроса: "Альтернативно, есть ли какой-нибудь быстрый способ конвертировать видео в 30 кадров в секунду".
Благодаря этому ответу при обработке видео должна быть возможность «без потерь» выбросить некоторые кадры B и P без медленного перекодирования. Первоначально это было предложено здесь и будет выполняться следующим образом:
ffmpeg -discard noref -i input.mp4 -c copy -vsync 0 reduced.mp4
Вторая ссылка утверждает, что это поддерживается для h264. Поскольку поддержка h265 интегрируется в ffmpeg по отдельности, ffmpeg 4.2.4, который у меня был под рукой, не может сделать это для h265 (пока).
ОБНОВЛЕНИЕ: На самом деле, mpv может напрямую передать эту опцию lavc. И это работает даже для файлов h265:
mpv --vd-lavc-skipframe=[nonref|bidir|nonkey]
- «--vd-lavc-skipframe=nonref», похоже, не пропускает значительное количество кадров.
- «--vd-lavc-skipframe=bidir» пропускает все B-кадры, в результате чего остается только несколько кадров в секунду.
- «--vd-lavc-skipframe=nonref» оставляет только I-кадры, что превращает видео в слайд-шоу.
Резюме: он не может работать со скоростью 30 кадров в секунду, но позволяет просматривать видео h265@60 с низким уровнем активности на старом оборудовании.
Пытаться mpv --framedrop=vo <video>
, Надеюсь, это должно делать то, что вы хотите. Если вы посмотрите руководство по mpv и ищите framedrop
Вы также увидите, что есть и другие варианты (которые "не рекомендуются"). Я мог представить, что --framedrop=decoder
может помочь, например, если ваш компьютер слишком медленный для декодирования видео.