Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 18.01.2015
Сообщений: 18

Как получить размеры кадра видеофайла?

15.02.2016, 23:50. Показов 4324. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уже долго пытаюсь найти ответ как можно получить информацию, а точнее расширение видеофайла.
Пробовал такой код:
C#
1
2
3
4
5
6
7
8
9
10
11
byte[] fileDataByte = ReadFile("C:/19571039480p.mp4");
int frameWidth = 0;
int frameHeight = 0;
 
//now to convert the byte arrays into an integer.
//for AVI files the width is always the 64-67 bytes (so starting index is 63)
//                 height is always the 68-71 bytes (so starting index is 67)
frameWidth  = BitConverter.ToInt32(fileDataByte, 63);
frameHeight = BitConverter.ToInt32(fileDataByte, 67);
return frameWidth // для теста пытался получить только 1 параметр
;
Но выбивает ошибка что ReadFile отсутствует в текущем контексте
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.02.2016, 23:50
Ответы с готовыми решениями:

Как получить продолжительность видеофайла?
Как получить продолжительность видеофайла с помощью C#?

Как получить бинарное представление видео-файла (Кодирование видеофайла)
Всем привет. У меня такой вопрос: если любая информация может быть представляна в двоичном виде, то как получить бинарное представление...

Bass_Dshow сохранение кадра из видеофайла (формат Hbitmap) в виде *.bmp
Здравствуйте! Хочу вытащить кадр из потока видео (DShow (mp4, avi и др.)) с помощью var vidbit: TBitmap;...

7
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
16.02.2016, 00:13
Цитата Сообщение от NoN_ Посмотреть сообщение
Но выбивает ошибка что ReadFile отсутствует в текущем контексте
Если проблема только в этом - читайте так:
C#
1
byte[] fileDataByte = File.ReadAllBytes(@"C:\19571039480p.mp4");
1
0 / 0 / 0
Регистрация: 18.01.2015
Сообщений: 18
16.02.2016, 00:22  [ТС]
Да так ошибка пропадает, но в ответе я получаю вовсе не расширение.
Может кто знает другой способ?
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
16.02.2016, 01:05
Вот эта ссылка говорит о том, что нужно не 63 и 67, а 64 и 68
C#
1
2
frameWidth = BitConverter.ToInt32(fileDataByte, 64); 
frameHeight = BitConverter.ToInt32(fileDataByte, 68);
ССылку забыл:
http://www.fastgraph.com/help/... ormat.html
1
0 / 0 / 0
Регистрация: 18.01.2015
Сообщений: 18
16.02.2016, 01:14  [ТС]
Спасибо, теперь действительно получаю нужные данные, а можете подсказать какие параметры у mp4 файлов?
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
16.02.2016, 11:11
NoN_,
Стоит ли читать весь файл в массив ради 8 байт?
Можно прочитать только эти байты. Будет намного быстрее:
C#
1
2
3
4
5
6
7
8
9
10
11
int frameWidth = 0;
int frameHeight = 0;
byte[] fileDataByte = new byte[8];
using (FileStream stream = new FileStream(@"d:\1.avi", FileMode.Open))
{
    stream.Seek(64, SeekOrigin.Begin);
    stream.Read(fileDataByte, 0, 8);
    frameWidth = BitConverter.ToInt32(fileDataByte, 0); 
    frameHeight = BitConverter.ToInt32(fileDataByte, 4);
}
return frameWidth;
1
0 / 0 / 0
Регистрация: 18.01.2015
Сообщений: 18
16.02.2016, 16:01  [ТС]
Да так конечно будет лучше)
Можете мне ещё помочь с форматом mp4 ?
Всё что я нашел по запросу "mp4 header format" это картинку которая примерно объясняет где стоит искать нужный параметр, но я в этом не разбираюсь.


Добавлено через 44 минуты
А можно получить данные от командной строки?
Например если я воспользуюсь командой ffmpeg -i C:\nameVideo.avi
то как мне получить результат?

Добавлено через 2 часа 15 минут
Попытался методом тыка узнать нужное число, но не получилось.
480 - это известная высота файла mp4
C#
1
2
3
4
5
6
7
8
9
10
11
12
byte[] fileDataByte = File.ReadAllBytes(@"C:\19571039480p.mp4");
int frameWidth = 0;
int frameHeight = 0;
 
for (int i = 1; i < 100; i++)
        {
            frameHeight = BitConverter.ToInt32(fileDataByte, i);
            if (frameHeight == 480)
            {
                return i;
            }
        }
Добавлено через 27 минут
Но это код подошел для файла формата avi, значит у mp4 другая структура?
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
16.02.2016, 17:00
Цитата Сообщение от NoN_ Посмотреть сообщение
значит у mp4 другая структура?
Да. Метаданные непонятно где расположены.
Попробуйте так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
MediaPlayer wmp;
private void button1_Click(object sender, EventArgs e)
{
    wmp = new MediaPlayer();
    wmp.MediaOpened += new EventHandler(wmp_MediaOpened);
    Uri uri = new Uri(@"d:\1.mp4"); //файл
    wmp.Open(uri);
}
 
void wmp_MediaOpened(object sender, EventArgs e)
{
    int height = wmp.NaturalVideoHeight; //высота
    int width = wmp.NaturalVideoWidth; //ширина
    MessageBox.Show(string.Format("{0}x{1}", width, height));
}
Понадобится
C#
1
using System.Windows.Media;
и подключите ссылку PresentationCore.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.02.2016, 17:00
Помогаю со студенческими работами здесь

Как получить свойства видеофайла?
Как получить свойства видеофайла кодек видео размер картинки кодек звука битрейт звука и т.д.

Как получить первый кадр из видеофайла
Здравствуйте, уважаемые форумчане. Прошу помощи в решении такой задачи: Как получить первый кадр из видеофайла. Практически, вопрос решен...

Как получить свойство "Продолжительность" видеофайла
Импортирую видеофайлы в БД, нужно получить хронометраж видео, помогите пожалуйста.

Получить поток видеофайла с сайта
Доброго времени суток. Поставлена задача получить поток указанного файла с сайта с видео. При этом весь файл не нужен. достаточно...

Получить информацию о аудиодорожках указанного видеофайла
Получить информацию о аудио дорожках указанного видеофайла На WSH


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru