2009-07-14 5 views
0

Можно ли изменить частоту кадров avi-файла, используя библиотеку Video for windows? Я проделал следующие шаги, но не смог.Изменить частоту кадров avi-файла

  1. AVIFileInit
  2. AviFileOpen (OF_READWRITE)
  3. pavi1 = AviFileGetStream
  4. avi_info = AviStreamInfo
  5. avi_info.dwrate = 15
  6. EditStreamSetInfo (dwrate) возвращает -2147467262.

ответ

6

Я уверен, что API AVIFile * не поддерживает это. (Отказ от ответственности: я был тем, кто определил эти API, но это было более 15 лет назад ...)

Вы не можете просто вызвать EditStreamSetInfo на простой AVIStream, только один, возвращенный из CreateEditableStream.

Тогда вы можете использовать AVISave, но это, очевидно, перепишет весь файл.

Итак, да, вы, вероятно, захотите сделать это, проанализировав заголовок файла AVI, чтобы найти тот DWORD, который хотите изменить. В форматах файлов RIFF и AVI есть много документов, например http://www.opennet.ru/docs/formats/avi.txt.

+0

Ну, я бы принял вашу память, даже если ее 15 лет;) Формат RIFF невероятно легко разбирается в любом случае. – Goz

+2

+1 для простоты ответа от оригинального разработчика! –

0

Я ничего не знаю о VfW, но вы всегда можете попробовать выполнить hex-редактирование файла. Частота кадров, вероятно, является полем где-то в заголовке файла AVI.

В противном случае вы можете создать скрипт некоторого инструмента, например mencoder [1], для копирования потока в новый файл с другой частотой кадров.

[1] http://www.mplayerhq.hu/ 
0

HRESULT: 0x80004002 (2147500034)
Имя: E_NOINTERFACE
Описание: Запрошенный COM интерфейс не
Тяжесть код: Failed
Facility Код: FACILITY_NULL (0) Код
Ошибка: 0x4002 (16386)

Это работает, если вы НЕ НАЗЫВАете EditStreamSetInfo?

Можете ли вы опубликовать код, используемый для установки информации о потоке?

+0

Я не знаю, есть ли другой способ опубликовать код на этом форуме. // ChangeFrameRate int frame_rate = 15; int error_code = 0; PAVIFILE file_ptr = NULL; PAVISTREAM stream_ptr = NULL; AVIFileInit(); AVIFileOpen (& file_ptr, movie_name, OF_READWRITE, NULL); AVIFileGetStream (file_ptr, & stream_ptr, 0, 0); AVIStreamInfo (stream_ptr, stream_info, sizeof (AVISTREAMINFO)); /* stream_info.dwRate is 25. Я хочу изменить этот параметр в файле на 15 */ error_code = EdiStreamSetInfo (stream_ptr, & stream_info, sizeof (AVISTREAMINFO));/* Returns (-2147500034) */ – 2009-07-14 22:46:28

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