Отредактируйте частоту кадров файла AVI

Можно ли изменить частоту кадров файла avi с помощью библиотеки "Видео для Windows"? Я попытался следующие шаги, но не удалось.

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

3 ответа

Решение

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

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

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

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

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

Это работает, если вы не вызываете EditStreamSetInfo?

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

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

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

[1] http://www.mplayerhq.hu/
Другие вопросы по тегам