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

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

15.02.2016, 23:50. Просмотров 1023. Ответов 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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.02.2016, 23:50
Ответы с готовыми решениями:

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

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

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

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

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

7
Даценд
Модератор
Эксперт .NET
5145 / 4377 / 2828
Регистрация: 20.04.2015
Сообщений: 7,880
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
5145 / 4377 / 2828
Регистрация: 20.04.2015
Сообщений: 7,880
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
16.02.2016, 01:05
NoN_
0 / 0 / 0
Регистрация: 18.01.2015
Сообщений: 18
16.02.2016, 01:14  [ТС] 5
Спасибо, теперь действительно получаю нужные данные, а можете подсказать какие параметры у mp4 файлов?
0
Даценд
Модератор
Эксперт .NET
5145 / 4377 / 2828
Регистрация: 20.04.2015
Сообщений: 7,880
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
5145 / 4377 / 2828
Регистрация: 20.04.2015
Сообщений: 7,880
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
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2016, 17:00

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

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

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


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

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

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