faradey Ответов: 1

Использование avifil32.dll с большими файлами


Здравствуйте, я использую avifil32.dll чтобы добавить звук в мое видео. Прежде всего, я создал AVIWriter и добавил все свои фотографии (MyAviFile.avi). Затем я создал Api для avifil32.dll и попробуйте создать менеджера
var manager = new AviManager(fileName, true);
public AviManager(String fileName, bool open){
			Avi.AVIFileInit();
			int result;

			if(open){ //open existing file
				
				result = Avi.AVIFileOpen(
					ref aviFile, fileName,
					Avi.OF_READWRITE, 0);

			}else{ //create empty file
				
				result = Avi.AVIFileOpen(
					ref aviFile, fileName, 
					Avi.OF_WRITE | Avi.OF_CREATE, 0);
			}

			if(result != 0) {
				throw new Exception("Exception in AVIFileOpen: "+result.ToString());
			}
		}


и результат был -214567...

Что я уже пробовал:

Я читал, что это из-за моего размера avi-файла (он близок к 4G). И что с ним делать.
А когда я конвертировал свой avi в flv, размер стал почти 20 Мб. Почему мой оригинальный avi слишком велик?

Richard MacCutchan

Посмотрите на код ошибки как на шестнадцатеричное значение, а затем вы можете использовать Google, чтобы узнать, что это значит.

faradey

Это мое возвращаемое значение: -2147204921. Можете ли вы мне помочь, я на самом деле не понимаю, что вы имеете в виду.

Richard MacCutchan

Вам нужно отобразить его в шестнадцатеричном формате, которыйFFFFFFFF800440C7‬ Фактический код ошибки - это нижняя половина800440C7‬ Проверьте документацию на наличие кодов ошибок, которые могут быть возвращены из соответствующего вызова API.

Jochen Arndt

То есть AVIERR_ERROR (определяется в центре.ч); универсальный (неизвестная) ошибка Ави.

Так что это не очень помогает. В этом файле также есть забавный комментарий (по крайней мере, в старой версии, которая у меня есть здесь):

// !!! Questions to be answered:
// How can you get a string form of these errors?
// Which of these errors should be replaced by errors in SCODE.H?

faradey

thanx много, это очень полезно, но это все, что я нахожу:
AVIERR_ERROR = HRESULT($800440C7);
и нет никакого описания, что делать(((

Richard MacCutchan

Извините, но вам придется обратиться за дополнительной информацией на специализированный форум или в Microsoft.

faradey

Я решил свою проблему и могу сказать:
Я использую C# и создал aviWriter с помощью AForge.Video.VFW.AVIWriter так и не установил кодек. Но теперь я скачиваю кодек (XVid) на свой ноутбук и устанавливаю его имя в конструкторе, и теперь он работает))
Спасибо всем вам, с наилучшими пожеланиями

1 Ответов

Рейтинг:
1

Jochen Arndt

Вы используете простой формат AVI, который хранит видео в несжатом виде. Вот почему размер файла так велик. Сам AVI ограничен 4 ГБ, поскольку он использует 32-битные указатели. Но VfW (Video for Windows) имеет ограничение в 2 ГБ. При использовании DirectShow вместо VfW ограничение составляет 4 ГБ AVI.

Вы можете подумать об использовании более позднего видеоформата, чем довольно старый формат AVI, или использовать DirectShow вместо VfW, когда все ваши несжатые файлы меньше 4 ГБ.