Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
NoN_
0 / 0 / 0
Регистрация: 18.01.2015
Сообщений: 18
1

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

15.02.2016, 23:50. Просмотров 648. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.02.2016, 23:50
Ответы с готовыми решениями:

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

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

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

Resize как получить предыдущие размеры
как на методе resize получить размер объекта до изменения его размеров

Как получить размеры окон всех запущенных программ и их имена?
Как получить размеры окон всех запущенных программ и их имена?

7
Даценд
Модератор
Эксперт .NET
4200 / 3966 / 2625
Регистрация: 20.04.2015
Сообщений: 7,199
16.02.2016, 00:13 2
Цитата Сообщение от NoN_ Посмотреть сообщение
Но выбивает ошибка что ReadFile отсутствует в текущем контексте
Если проблема только в этом - читайте так:
C#
1
byte[] fileDataByte = File.ReadAllBytes(@"C:\19571039480p.mp4");
1
NoN_
0 / 0 / 0
Регистрация: 18.01.2015
Сообщений: 18
16.02.2016, 00:22  [ТС] 3
Да так ошибка пропадает, но в ответе я получаю вовсе не расширение.
Может кто знает другой способ?
0
Даценд
Модератор
Эксперт .NET
4200 / 3966 / 2625
Регистрация: 20.04.2015
Сообщений: 7,199
16.02.2016, 01:05 4
Вот эта ссылка говорит о том, что нужно не 63 и 67, а 64 и 68
C#
1
2
frameWidth = BitConverter.ToInt32(fileDataByte, 64); 
frameHeight = BitConverter.ToInt32(fileDataByte, 68);
ССылку забыл:
http://www.fastgraph.com/help/avi_header_format.html
1
NoN_
0 / 0 / 0
Регистрация: 18.01.2015
Сообщений: 18
16.02.2016, 01:14  [ТС] 5
Спасибо, теперь действительно получаю нужные данные, а можете подсказать какие параметры у mp4 файлов?
0
Даценд
Модератор
Эксперт .NET
4200 / 3966 / 2625
Регистрация: 20.04.2015
Сообщений: 7,199
16.02.2016, 11:11 6
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
NoN_
0 / 0 / 0
Регистрация: 18.01.2015
Сообщений: 18
16.02.2016, 16:01  [ТС] 7
Да так конечно будет лучше)
Можете мне ещё помочь с форматом 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
4200 / 3966 / 2625
Регистрация: 20.04.2015
Сообщений: 7,199
16.02.2016, 17:00 8
Цитата Сообщение от 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
16.02.2016, 17:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2016, 17:00

Как распараллелить обработку кадра?
Добрый день! Пишу программу для обработки видео. С помощью библиотеки AForge...

Получить размеры изображения, загруженного в PictureBox
Добрый день. Подскажите, пожалуйста. Можно как-то вытащить размер изображения...

Заданы размеры A, B прямоугольного отверстия и размеры X, Y, Z кирпича. Определить, пройдет ли кирпич через отверстие
Не очень понимаю как в программе все это определить. Объясните пожалуйста, если...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru