Как увеличить частоту кадров видео, одновременно уменьшая продолжительность видео?

У меня есть видеофайл с частотой кадров 30, но видеоплееры (например, VLC) считывают частоту кадров как 25 (я не знаю, почему!). Это вызывает несоответствие между фактической продолжительностью видео и тем, что показывают видеоплееры. Например, разница во времени между отметками времени видео, показанными вверху по центру начального и конечного кадров (см. прикрепленные изображения), составляет 12 минут и 36 секунд, но продолжительность видео, отображаемая видеопроигрывателем, составляет 15 минут и 7 секунд. (см. нижний правый угол на любом из двух изображений). Я думаю, что видеоплееры умножают исходную продолжительность видео на 1,2 (30/25).

Я попытался использовать ffmpeg, чтобы изменить частоту кадров на 30, используя:

ffmpeg -i input.mp4 -filter:v fps=30 output.mp4

Но ffmpegдокумент по изменению частоты кадров говорит, что "выходная продолжительность видео останется прежней."

Какие изменения мне нужно внести в свой код, чтобы продолжительность видео, отображаемая в проигрывателе, соответствовала фактической продолжительности видео?

Начальный кадр:

Как увеличить частоту кадров видео, одновременно уменьшая продолжительность видео?

Конечный кадр:

Как увеличить частоту кадров видео, одновременно уменьшая продолжительность видео?

Итак, когда вы воспроизводите видео, оно слишком медленное?

kesh 20.03.2022 20:31

@kesh, не слишком медленно, но время не соответствует! Итак, 10 минут видеоплеера соответствуют ~8,33 минутам реального видео.

Ashirwad 20.03.2022 21:39
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
29
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если проблема заключается в том, что в файле хранится неправильная частота кадров (25 кадров в секунду) (vlc сообщает то, что сообщает файл), вы можете попробовать:

ffmpeg -r 30 -i input.mp4 [-c copy] output.mp4
  • Указание параметра -r 30вход переопределяет частоту кадров, указанную в файле.
  • Сначала попробуйте -c copy (без скобок), чтобы увидеть, сможете ли вы скопировать закодированные данные. Если это не работает, удалите его и перекодируйте видеопоток.

Большой! Решение без [-c copy] сработало для меня. Время видео теперь идеально совпадает друг с другом. Спасибо!

Ashirwad 20.03.2022 22:10

Другие вопросы по теме