tl; dr - для моего случая использования, процесс обработки кадра, который не присутствует в конечном AVI, является showstopper, а процесс мультиплексирования/демонстрации AVI достаточно сложный, что мне лучше просто принять небольшое количество кадры могут быть сброшены в начале. Таким образом, я, скорее всего, соглашусь на то, чтобы нажимать несколько специальных кадров в начале (идентифицированных с помощью пары GUID/счетчика, закодированной в пикселях), прежде чем я начну обрабатывать фреймы. Затем я могу найти эти специальные кадры после записи AVI для определения кадра, в котором начинается обработка.
Все, что я видел, заставляет меня поверить, что я изначально попросил, что это невозможно. Основываясь на размере файла, я думаю, что технически видеофрагменты записываются в файл AVI, но для большинства намерений они также не могут быть.
То есть, avi-плееры, такие как virtualdub и VLC, и даже разветвитель DirectShow AVI, игнорируют/качают любые видеокадры, присутствующие до начала звука. Поэтому я предполагаю, что вам придется проанализировать файл AVI с помощью какой-либо другой библиотеки для извлечения предустановленных кадров.
Причина, по которой это меня беспокоит, заключается в том, что я пишу параллельную структуру данных с записью для каждого кадра в файле AVI, и мне нужно знать, какие данные идут с кадром. Если кадры удаляются из AVI, я не могу сопоставить кадры и данные.
У меня был успех с созданием настраиваемых фильтров преобразования после фильтров видео/аудио захвата. Эти фильтры смотрят на отметки времени и отбрасывают видеофрагменты до тех пор, пока не будет установлено время начала аудио, и видеофрагменты будут после этого. Затем фильтры downstream знают, что они могут полагаться на видеофрагменты, которые они обрабатывают. Недостатком является то, что звуковой фильтр фактически подает сэмплы с задержкой, поэтому, когда звук начинается с 100 мс, я не обнаруживаю, пока я уже не обрабатываю видеокадр с частотой 250 мс, а это означает, что я сбросил 250 мс видеоданных, чтобы обеспечить Я знаю, когда у видеокадров будет сопутствующий звук. Объедините это с различными инструментами AVI, которые ведут себя по-разному, когда видео запускает более 1 продолжительности видеозаписи после запуска звука, и моя уверенность в попытке управлять AVIMux/Splitter начинает ослабевать.
Все это приводит меня к выводу, что AVIMux и AVI Splitter достаточно сложны, чтобы не пытаться точно их контролировать.
Спасибо за идею; к сожалению, это не соответствует тому, что я вижу. Я сделал простой график, который принимает существующий файл avi, разбивается на видео/аудиопотоки, а затем сдвигает временные метки и аудио вперед примерно на 100 мс. Затем это объединяется обратно через мультиплексор AVI и выписывается. Результатом является файл AVI, который меньше и на 6 кадров короче. Я могу повторить процесс и постоянно обрезать 6 кадров каждый раз. Все видеокадры имеют положительные временные метки. Я не понимал, что отрицательные временные метки также могут привести к снижению, поэтому я буду следить за этим. – aggieNick02
Чтобы добавить немного и уточнить после нескольких экспериментов, смещение аудиоданных приводит к тому, что файл AVI имеет тот же размер, что и оригинал, но, глядя на полученный AVI-файл в directshow, virtualdub и т. Д., Все кадры перед первым звуком кадр пропускается. Если вы запустите полученный файл через простой сплиттер avi и avi mux обратно, то есть когда размер файла действительно упадет. – aggieNick02
Я также подтвердил ваше заявление об отрицательных временных отметках; если время всего видеоролика отрицательное, оно действительно отбрасывается. Если какая-либо часть положительная, она сохраняется. Источник directshow, с которым я работаю, действительно иногда выплевывает первый кадр со временем, полностью отрицательным, поэтому это здорово знать и спасает меня от других головных болей. – aggieNick02