Как использовать TagLib# для получения информации о VideoHeader из видеофайлов
Я создаю программу для доступа к информации о различных типах файлов, до сих пор я был успешен в основном с файлами MP3, и сейчас я работаю над типами видео MPG и т. Д.
До сих пор мне удавалось получить название видео, год, длительность, жанр, высоту и ширину видео без особых усилий, и теперь я пытаюсь получить доступ к чуть более сложным аспектам из раздела VideoHeader TagLib.
Вот код, который мне удалось получить, найдя здесь что-то о AudioHeaders, но он не сработал:
TagLib.File f = TagLib.Mpeg.File.Create(GetMPG.FileName);
foreach(ICodec codec in f.Properties.Codecs){
TagLib.Mpeg.VideoHeader G = (TagLib.Mpeg.VideoHeader) codec;
MPGbps.Text = G.VideoFrameRate.ToString();
}
Куда я иду не так?
Мой новый текущий код:
TagLib.File f = TagLib.File.Create(GetMPG.FileName);
foreach(ICodec codec in f.Properties.Codecs){
TagLib.Mpeg.VideoHeader G = (TagLib.Mpeg.VideoHeader) codec;
if (G != null)
{
MPGbps.Text = G.VideoFrameRate.ToString();
}
}
Это закончилось ошибкой:
Ошибка 2 Оператор '!=' Не может быть применен к операндам типа 'TagLib.Mpeg.VideoHeader' и ''
примечание: добавлены пробелы в окончательном нуле, так как в посте он не отображался
1 ответ
Видеофайлы имеют несколько кодеков, аудио и видео. Что происходит с вашим кодом, так это то, что в одной итерации цикла кодек не является VideoHeader, что означает, что G установлен неправильно. Я не уверен, что это вызывает исключение или G установлен в пустой VideoHeader.
Код ниже должен работать:
TagLib.File f = TagLib.File.Create(GetMPG.FileName);
foreach(ICodec codec in f.Properties.Codecs){
if(codec is TagLib.Mpeg.VideoHeader) {
TagLib.Mpeg.VideoHeader G = (TagLib.Mpeg.VideoHeader) codec;
MPGbps.Text = G.VideoFrameRate.ToString();
}
}
Кроме того, вы должны использовать TagLib.File.Create
вместо. Это статический фабричный метод.
Обновить
Помимо вышеуказанной первоначальной проблемы, где codec
был приведен как неправильный тип, была проблема, что файл не был MPEG и фактически не содержал TagLib.Mpeg.VideoHeader
и имел TagLib.Riff.BitmapInfoHeader
вместо. Помимо основных свойств, гарантированных TagLib.IVideoCodec
детали, предоставляемые отдельными форматами файлов, широко варьируются в зависимости от конкретного случая. Важно знать, какие типы файлов находятся в области видимости, какие функции вы хотите обнаружить, и извлекать подробности видео по мере доступности.