Как получить инфу о файле? Разширение видео

NoN

Пользователь
Регистрация
04.01.2015
Сообщения
183
Благодарностей
22
Баллы
18
Здравствуйте, уже долго пытаюсь найти ответ как можно получить информацию, а точнее расширение видеофайла.
Пробовал такой код:
Код:
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 отсутствует в текущем контексте
 
Последнее редактирование:

myweb101

Client
Регистрация
29.04.2013
Сообщения
175
Благодарностей
30
Баллы
28
Наверно надо подключить
using System.IO
Но мне кажется лучше получать данные о видео через ffmpeg.
 
  • Спасибо
Реакции: NoN

Nick

Client
Регистрация
22.07.2014
Сообщения
1 983
Благодарностей
817
Баллы
113
Этот код определяет размеры ролика в пикселях (ширина и высота).
Какие у тебя входные данные, путь к папке с роликом или ссылка какая-то? Просто сделай регулярку и вынимай всё, что написано после последней точки.
 
  • Спасибо
Реакции: NoN

NoN

Пользователь
Регистрация
04.01.2015
Сообщения
183
Благодарностей
22
Баллы
18
Наверно надо подключить
using System.IO
Но мне кажется лучше получать данные о видео через ffmpeg.
а разве using System.IO не по дефолту подключен?
а насчет ffmpeg, вы имеете виду через командную строку получать информацию?
 

NoN

Пользователь
Регистрация
04.01.2015
Сообщения
183
Благодарностей
22
Баллы
18
Этот код определяет размеры ролика в пикселях (ширина и высота).
Какие у тебя входные данные, путь к папке с роликом или ссылка какая-то? Просто сделай регулярку и вынимай всё, что написано после последней точки.
я это и хочу получить (ширину и высоту),
входные настройки тут одни как я понимаю это путь к файлу "C:/19571039480p.mp4"
 

NoN

Пользователь
Регистрация
04.01.2015
Сообщения
183
Благодарностей
22
Баллы
18
А можно получить данные от командной строки?
Например если я воспользуюсь командой ffmpeg -i C:\nameVideo.avi
то как мне получить результат?
 

Nick

Client
Регистрация
22.07.2014
Сообщения
1 983
Благодарностей
817
Баллы
113
размеры — это разрешение, а не расширение.

Код:
ffmpeg -i C:\nameVideo.avi
и потом работай с файлом
 

NoN

Пользователь
Регистрация
04.01.2015
Сообщения
183
Благодарностей
22
Баллы
18
размеры — это разрешение, а не расширение.

Код:
ffmpeg -i C:\nameVideo.avi
и потом работай с файлом
Я так понимаю вы предлагаете это через консоль делать, но а как ответ получить?
Я сделал такой костыль
Код:
ffmpeg -i C:\test.mp4 1> С:info.txt 2>&1
а потом уже беру нужные данные с текстовика?
Можно ли обойтись без текстовика?
 

Nick

Client
Регистрация
22.07.2014
Сообщения
1 983
Благодарностей
817
Баллы
113
Это то же самое, что я предлагал.
Можно, по-моему, сделать сниппет на C# и получить ответ сразу в переменную. Но это надо уметь программировать.
 

ezotonal

Client
Регистрация
13.01.2014
Сообщения
819
Благодарностей
231
Баллы
43
Я так понимаю вы предлагаете это через консоль делать, но а как ответ получить?
Я сделал такой костыль
Код:
ffmpeg -i C:\test.mp4 1> С:info.txt 2>&1
а потом уже беру нужные данные с текстовика?
Можно ли обойтись без текстовика?
Приветствую. Хочу записать информацию об mp3 в файл. Выдает ошибку и файл не записывается. Пробую туже команду в консоли cmd все удачно обрабатывает, через зенно же нет. В чем может быть подвох?

upload_2018-2-20_16-25-42.png
 
  • Спасибо
Реакции: impul5e

impul5e

Client
Регистрация
15.08.2017
Сообщения
202
Благодарностей
40
Баллы
28
Приветствую. Хочу записать информацию об mp3 в файл. Выдает ошибку и файл не записывается. Пробую туже команду в консоли cmd все удачно обрабатывает, через зенно же нет. В чем может быть подвох?

Посмотреть вложение 27360
та же самая ситуация, как решил?
 

ezotonal

Client
Регистрация
13.01.2014
Сообщения
819
Благодарностей
231
Баллы
43

ezotonal

Client
Регистрация
13.01.2014
Сообщения
819
Благодарностей
231
Баллы
43
та же самая ситуация, как решил?
1. Создал cmd

upload_2019-1-25_21-24-4.png


2. Затем запустил код с указанием созданного файла cmd

Код:
var process = new System.Diagnostics.Process {
   StartInfo = new System.Diagnostics.ProcessStartInfo {
        UseShellExecute = false,
        RedirectStandardOutput = true, 
        RedirectStandardError = true,
        RedirectStandardInput = true,
        CreateNoWindow = false,
        FileName = project.Directory + @"\base\tmp\run.cmd", // указал путь до созданного файла cmd
        WorkingDirectory = project.Directory + @"\base\tmp", // директория куда сохранится result.txt
        //Arguments = project.Variables["param"].Value
    }
};
process.Start();
process.WaitForExit();
string output = process.StandardOutput.ReadToEnd();
process.Close();
process.Dispose();

3. Читаем созданный файл result.txt
 
  • Спасибо
Реакции: Nike59 и impul5e

macasin2003

Новичок
Регистрация
28.11.2019
Сообщения
1
Благодарностей
2
Баллы
1
Вот без файла. С разборкой параметров по переменным:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
using System.Windows.Forms;
public class VidInfo
    {
        public string Duration { get; set; }
        public string Bitrate { get; set; }
        public string Resolution { get; set; }
        public string Format { get; set; }
        public string FileName { get; set; }

        public string FileSize { get; set; }
        public VidInfo(string file_patch)
        {
            try
            {
                FileName = Path.GetFileName(file_patch);
                FileSize = FileSizeFormat(new FileInfo(file_patch).Length);
                string cmd_line = $"-i {file_patch}";

                Process process = Process.Start(new ProcessStartInfo
                {
                    FileName = @"ffmpeg.exe",
                    Arguments = cmd_line,
                    UseShellExecute = false,
                    RedirectStandardOutput = true,
                    RedirectStandardError = true,
                    CreateNoWindow = true,
                });

                process.EnableRaisingEvents = true;               

                string processOutput = null;
                Format = Path.GetExtension(file_patch);

                while ((processOutput = process.StandardError.ReadLine()) != null)
                {

                    if (processOutput.Contains("Duration:"))
                    {
                        Duration = TimeSpan.Parse(processOutput.Split(',')[0].Replace("Duration: ", string.Empty).Trim()).ToString("hh':'mm':'ss");
                        Bitrate = processOutput.Split(',')[2].Replace("bitrate: ", string.Empty).Trim();                       
                    }

                    if (processOutput.Contains("Video:"))
                    {
                        Resolution = Regex.Match(processOutput.Split(',')[2], @"\d*x\d*").Value;
                    }
                }
            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                throw;
            }
        }

        private string FileSizeFormat(long lSize)
        {
            double size = lSize;
            int index = 0;
            for (; size > 1024; index++)
                size /= 1024;
            return size.ToString("0 " + new[] { "B", "KB", "MB", "GB", "TB" }[index]);
        }
    }
 
Последнее редактирование:
  • Спасибо
Реакции: intagens и ramzes8

eee

Client
Регистрация
04.06.2018
Сообщения
134
Благодарностей
31
Баллы
28
1. Создал cmd

Посмотреть вложение 35585

2. Затем запустил код с указанием созданного файла cmd

Код:
var process = new System.Diagnostics.Process {
   StartInfo = new System.Diagnostics.ProcessStartInfo {
        UseShellExecute = false,
        RedirectStandardOutput = true,
        RedirectStandardError = true,
        RedirectStandardInput = true,
        CreateNoWindow = false,
        FileName = project.Directory + @"\base\tmp\run.cmd", // указал путь до созданного файла cmd
        WorkingDirectory = project.Directory + @"\base\tmp", // директория куда сохранится result.txt
        //Arguments = project.Variables["param"].Value
    }
};
process.Start();
process.WaitForExit();
string output = process.StandardOutput.ReadToEnd();
process.Close();
process.Dispose();

3. Читаем созданный файл result.txt
через ZP у меня в этом файле получается вот такие иероглифы:

晦灭来瘠牥楳湯㐠㈮ㄮ䌠灯特杩瑨⠠⥣㈠〰ⴰ〲㤱琠敨䘠
а если делаю через командную строку, то все в нормальной кодировке
 

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)