У меня есть видеофайл с частотой кадров 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, не слишком медленно, но время не соответствует! Итак, 10 минут видеоплеера соответствуют ~8,33 минутам реального видео.
Если проблема заключается в том, что в файле хранится неправильная частота кадров (25 кадров в секунду) (vlc сообщает то, что сообщает файл), вы можете попробовать:
ffmpeg -r 30 -i input.mp4 [-c copy] output.mp4
-r 30
вход переопределяет частоту кадров, указанную в файле.-c copy
(без скобок), чтобы увидеть, сможете ли вы скопировать закодированные данные. Если это не работает, удалите его и перекодируйте видеопоток.Большой! Решение без [-c copy]
сработало для меня. Время видео теперь идеально совпадает друг с другом. Спасибо!
Итак, когда вы воспроизводите видео, оно слишком медленное?