Кто-нибудь знает (или знает о ресурсе, который содержит) список кодов начала кадра для распространенных видеоформатов (MPEG-1/2/4, .wmv, .mov и т. д.).
Например, видеокадр MPEG-1 (я думаю) всегда будет начинаться с «00 00 01 00».
По сути, я хотел бы знать это, чтобы я мог написать программу, которая может автоматически находить начало кадров в видео для ряда различных видеоформатов.





Чего ты хочешь добиться?
Это вопрос, как структурированы типы видеоконтейнеров?
См. Например: http://www.daubnet.com/formats/AVI.html
Это описание структуры файлов avi. Google может помочь вам найти другие форматы файлов-контейнеров.
Когда вы записываете видео, оно обычно состоит из отдельных кадров, подумайте об отдельных файлах растровых изображений в каталоге.
Чтобы иметь только 1 файл видео, этот поток кадров помещается в контейнер, который имеет заголовок, описывающий содержимое, и определенный макет, в котором кадры последовательно сохраняются в файле.
Простой пример для моего собственного контейнера:
{
struct header
{
unsigned int frametype;
unsigned int framesize;
};
byte* readFrame( header* pHdr, int frameNum )
{
byte* pFirstFrame = ((byte*) pHdr) + sizeof( header );
return pFristFrame + frameNum * pHdr->framesize;
}
}
Есть несколько других типов контейнеров. AVI - только один из этих типов контейнеров. Чтобы перейти к отдельным кадрам, вы должны интерпретировать заголовок в файле, а затем на основе этой информации вычислить положение кадра, который вы хотите проанализировать.
Выложил вам ссылку на определение формата файла avi. Есть и другие места, где можно получить информацию о форматах файлов mpeg / mkv / ogm.
Эта информация нужна вам, чтобы ваша программа заработала.
Кстати, сжатые форматы не защищают все отдельные кадры независимо. Они защищают отдельный кадр, а затем несколько промежуточных кадров, которые содержат только информацию о том, как текущий кадр отличается от последнего полного кадра. Таким образом, вы не можете извлекать полные кадры для каждого номера кадра.