2013-01-21 2 views
0

Я пытаюсь захватить видео AVI, используя DirectShow AVIMux и FileWriter Фильтры. Когда я подключаю SampleGrabber фильтр вместо AVIMux, я отчетливо вижу, что поток 30 кадров в секунду, однако при захвате видео каждый кадр дублируется 4 раза, и я получаю 120 кадров вместо 30. Фильм в 4 раза медленнее чем это должно быть, и только первый кадр в наборе 4 является ключевым фреймом. Я пробовал тот же эксперимент с 8 кадров в секунду, и за каждое полученное изображение у меня было 15 кадров в видео. И в случае 15 кадров в секунду я получил каждый кадр 8 раз.Захват видео AVI с DirectShow

Я пробовал как писать код на C++, так и тестировать его с помощью Graph Edit Plus. Есть ли способ контролировать это? Может быть, некоторые ограничения на фильтр AVIMux?

ответ

0

Вы не указываете свой формат захвата, который может иметь некоторое отношение к проблеме, но, как правило, это похоже на график при записи в файл, имеет узкое место, которое препятствует потоку продолжать поток со скоростью 30 кадров в секунду. Камера пытается создать кадры со скоростью 30 кадров в секунду, и она будет делать это до тех пор, пока буферы будут переработаны для заполнения.

Но здесь буферы недоступны, потому что файловый писатель занят получением их на диск. Фильтр захвата голодает, и в этой ситуации он увеличивает счетчик «сброшенного кадра», который перемещается с каждым захваченным кадром. AVIMux использует этот счет для вставки индикатора в файл AVI, который говорит, что «кадр должен быть доступен здесь для записи в файл, но не во время воспроизведения, повторите последний кадр». Таким образом, файл должен иметь местозаполнители для 30 кадров в секунду - некоторые заполнены фактическими кадрами и некоторые «отброшенные кадры».

Кроме того, вы не упоминаете, что вы мультиплексируете в аудио, который будет действовать как опорный тактовый сигнал для графика, чтобы поддерживать синхронизацию аудио-видео. Когда захват завершается, если также используется аудиопоток, AVIMux изменяет частоту кадров видеопотока, чтобы увеличить продолжительность двух потоков. Вы можете проверить, изменил ли AVIMux частоту кадров видеопотока, сбросив заголовок файла AVI (или, возможно, щелкнуть правой кнопкой мыши по файлу в проводнике и посмотреть на свойства).

Если мне пришлось опасаться догадки о корне проблемы, я бы поставил пари, что у захватчика есть ошибка при вычислении количества сброшенных кадров, которое в свою очередь испортило AVIMux. Это происходит с другой камерой?

Смежные вопросы