Как читать .avi файлы C ++ - PullRequest
2 голосов
/ 05 мая 2011

Я очень мало сделал с с ++, так со мной.

Я хочу прочитать видеофайл в формате AVI для программы, которую я делаю. У меня есть местоположение файла, сохраненное как string. Есть ли хорошие уроки по использованию файлов .avi в c ++ или кто-нибудь знает, кому их читать? Это так же, как обычные файлы?

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

Редактировать В соответствии с просьбой, здесь есть небольшое объяснение. У меня есть ранее заданный ТАК вопрос , который углубляется в детали, но вот что я хочу сделать:

Я делаю программу, которая распознает лица (хотя и OpenCV). На данный момент мне предоставлена ​​программа видеопроцессора, которая распознает каждое лицо на кадре и возвращает кадр как изображение, а CvRec лица. Я хочу взять эти лица и проверить их, чтобы убедиться, что все они действительно являются лицами.

После того, как у меня будут все лица (проверено), я хочу затем взять изображения и проверить их вместе. Я проверяю лица на каждом кадре для изменения размера и расстояния. Если лица проходят через это в течение двух секунд, я хочу обрезать лицо и сделать его объектом каждого кадра.

После обрезки каждого кадра я хочу сохранить новый видеофайл для пользователя.

Надеюсь, это поможет. Если кому-то понадобится лучшее объяснение, пожалуйста, дайте мне знать.

Ответы [ 2 ]

5 голосов
/ 05 мая 2011

Прежде всего, немного фона.

Что такое AVI?
AVI означает Чередование аудио и видео . Это особый случай RIFF (формат файла обмена ресурсами) . AVI определяется Microsoft и является наиболее распространенным форматом для аудио / видео данных.

Полагаю, вы захотите прочитать файл avi и декодировать сжатые видеокадры. AVI-файл похож на любой другой обычный файл, и вы можете использовать fread () ( в C ) или iostream ( в C ++ ), чтобы открыть файл avi и прочитать его содержимое. Но содержимое файла avi - это видеокадры в сжатом формате. Сжатие позволяет эффективно упаковывать видеоконтент больших размеров в меньшем объеме памяти. Чтобы иметь смысл этих сжатых данных, вам потребуется декодировать кодированный формат данных. У вас будет изучить стандарт, который описывает, как выполняется кодирование AVI , а затем извлечь и декодировать кадры. эти необработанные видеоданные теперь при подаче на видеоустройство будут отображаться в формате видео.

4 голосов
/ 05 мая 2011

Кажется, вы остаетесь в OpenCV, поэтому все просто.Если OpenCV скомпилирован правильно, он может делегировать io / coding / decoding другим библиотекам.Quicktime и другие, например, но лучше всего использовать ffmpeg.Вы открываете, считываете и декодируете все, используя API OpenCV, который дает вам кадр за кадром.

Убедитесь, что ваш OpenCV скомпилирован с поддержкой ffmpeg, а затем прочитайте учебник OpenCV о том, как читать / записывать AVI-файлы.Это действительно просто.

Хотя сборка OpenCV с поддержкой ffmpeg может быть сложной.Возможно, вы захотите переключиться на более старую версию OpenCV, если не можете запустить ffmpeg с текущей версией.

Лично я бы не стал тратить время на самостоятельное чтение видео и делегирование задачи OpenCV.Вот как это должно быть использовано.

...