Mjpeg запись с сохранением информации о времени FFMPEG

9287
Muhammad Adeel Zahid

Я записываю видео MJPEG с IP-камеры и сохраняю его в файл, но проблема в том, что продолжительность файла намного меньше, чем фактическое время записи. Его около 9 секунд видео на 2 минуты записи. Я попробовал следующие команды по порядку

ffmpeg -f mjpeg -r 8 -i http://c-cam.uchicago.edu/mjpg/video.mjpg -vcodec mpeg4 -b 1000000 -r 8 video_file.avi 

Затем я опустил большинство флагов и попробовал вот так

ffmpeg -f mjpeg -i http://c-cam.uchicago.edu/mjpg/video.mjpg video_file.avi 

Но проблема в том, что продолжительность записанного файла составляет 9 секунд, тогда как фактическое время записи составляет около 2 минут. Я наконец попробовал фильтр setpts, который должен вставить метки времени. Команда выглядит следующим образом

ffmpeg -f mjpeg -i http://c-cam.uchicago.edu/mjpg/video.mjpg -vf "setpts=1*PTS" video_file.avi 

Но результат остался прежним. Время записи было намного больше, чем продолжительность видео.

2
Вы пропускаете изображения / кадры из окончательного видео (например, файл "просто короток для моей интуиции")? Вас раздражает только «отображение временных отметок (pts)»? akira 11 лет назад 0
Я точно не знаю, пропущены ли кадры. Я думаю, что это потому, что видео записано с интернет-источника. Меня беспокоит то, что я записываю видео в течение 2 минут, а финальное видео воспроизводится всего за 9 секунд. Я думаю, что это связано с частотой кадров. Скажем, ffmpeg устанавливает частоту кадров 10 кадров в секунду, и он получает 100 кадров в течение двух минут, но он просто воспроизводит ее в течение 10 секунд. Это мое понимание проблемы! Muhammad Adeel Zahid 11 лет назад 0

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

4
Jann

Я знаю, что это старый вопрос, однако, он работал для меня как вариант ffmpeg: -use_wallclock_as_timestamps 1

Отвечать на старые вопросы вполне приемлемо. Не могли бы вы уточнить, каков эффект этого варианта? Например, могут быть включены соответствующие части страницы руководства. Ярослав Рахматуллин 11 лет назад 0
Это вынуждает FFMPEG (действительно хак) использовать метку времени записывающей СИСТЕМЫ вместо того, чтобы пытаться вычислить время фильма в зависимости от количества обнаруженных кадров в секунду. Обнаружение FPS общеизвестно неточно, например, поскольку FFMPEG свободно допускает, когда выдает эту ошибку: «Оценивая длительность по битрейту, это может быть неточным». Это также позволяет использовать флаг -t (длительность) в реальном времени, а не зависеть от вычисления fps. Jann 11 лет назад 2
0
Dennis Jansky

I had a similar problem and the -re option resolved it for me. This tells ffmpeg to act as a frame grabber would act.

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