Проблема записи DirectShow - fps - PullRequest
2 голосов
/ 30 мая 2011

Я просто создаю простой график для записи видео из источника. Фильтр:

SourceFilter ---> Muxer ---> FileWriter

Я могу сохранять видео, поступающие из SourceFilter, на мой локальный диск.

But when i try to play the recorded video, it play in "slow motion" :-).

Этоуверен, что есть проблема fps (frame persecond).Как я могу это исправить?какие-нибудь идеи?

PS:

Чтобы проверить, дает ли мой SourceFilter правильный fps, я просто создаю другой график:

SourceFilter ---> Video Decoder ---> Video Renderer

, и он воспроизводится с правильной скоростью (fps)

Подробнее:

SourceFilter(*.mp4 file format) ---> Avi Mux Filter ---> File writer Filter

Эта запись, но с неверным fps.

Когда я пробую gdcl MP4 Mux ( можно увидеть здесь ), я успешно получаю правильные fps.

SourceFilter(*.mp4 file format) ---> GDCL MPEG 4 Mux Filter ---> File writer Filter

Другой сценарий

SourceFilter( *.h264 file format) ---> Avi Mux Filter ---> File writer Filter
SourceFilter( *.h264 file format) ---> GDCL MPEG 4 Mux Filter---> File writer Filter

Он записывает, но записывает файл не воспроизводится .

И на самом деле я не хочу ничего декодировать ... Просто запишите первоначально закодированные видеокадры (mp4, h264) в файл. А также мне может не потребоваться синхронизация звука с видео ... Зачем нужен Mux?

Мой идеальный фильтр должен выглядеть следующим образом:

SourceFilter(whatever format) ---> File writer

Ответы [ 2 ]

3 голосов
/ 31 мая 2011

Комментарий Ральфа, вероятно, прав. Формат файла AVI не имеет временных кадров, только средняя частота кадров. Поэтому, когда приходит кадр, мультиплексор должен решить, поместить ли этот кадр в следующий «слот», или вставить маркер «пропущенного кадра» и поместить кадр в слот после. Если временные метки исходного фильтра не соответствуют частоте кадров типа носителя, вы получите этот эффект.

Вы можете сохранить элементарный поток видео в файл, но используйте пример фильтра дампа, а не средство записи файлов. Средство записи файлов имеет специальный протокол, позволяющий мультиплексорам произвольный доступ к файлу (используя временные метки в качестве смещения файла). Вы хотите просто сохранить данные в виде потока, и пример Dump делает это.

1 голос
/ 01 июня 2012

В моем случае у меня действительно был фильтр источника, который неправильно установил AvgTimePerFrame.После того, как я исправил это (это был мой собственный фильтр исходного кода), AVI также пошел вместе с тем, что он получил от апстрима.

...