как получить продолжительность видеофайла в С#

Я хочу получить продолжительность видеофайла на С#. У меня есть возможность получить продолжительность видеофайла, но код работает только на локальном компьютере. Если я разверну свой код на сервере и загружу видеофайл, этот код выдаст ошибку. Я использую следующий код, чтобы получить время видео.

используя QuartzTypeLib;

 string file1 = "c://ds.mpeg"
        IMediaPosition m_objMediaPosition = null;
        FilgraphManager m_objFilterGraph = new FilgraphManager();
        m_objFilterGraph.RenderFile(filename);
        m_objMediaPosition = m_objFilterGraph as IMediaPosition;

        int s = (int)m_objMediaPosition.Duration;
        int h = s / 3600;
        int m = (s - (h * 3600)) / 60;
        s = s - (h * 3600 + m * 60);

        string time = String.Format("{0:D2}:{1:D2}:{2:D2}", h, m, s);
        lblmsg.Text = time.ToString();
        m_objMediaPosition = null;
        m_objFilterGraph = null;

Есть ли у вас какой-либо код, который возвращает продолжительность загруженного видеофайла.


person Community    schedule 19.08.2009    source источник


Ответы (4)


Быстрый и грязный способ с ffmpeg: запустите ffmpeg -i "c:\ds.mpeg" и проанализируйте вывод.

person RA.    schedule 08.12.2009

попробуйте использовать DirectShowLib

person Chen Kinnrot    schedule 07.12.2009

Похоже, что элемент управления, который вы используете, пытается каким-то образом ссылаться на графическое оборудование для выполнения этой функции. то есть с помощью пользовательского интерфейса, чтобы иметь возможность перечислить эту информацию.

Возможно, вы можете взглянуть на элемент управления MediaElement. в ВПФ?

person Sebastian Gray    schedule 27.08.2009

Я попытался получить продолжительность видео немного другим способом:
На самом деле, используя компонент Windows Media Player, мы также можем получить продолжительность видео.
Следующий фрагмент кода может помочь вам, ребята:

using WMPLib;
// ...your code here...

var player = new WindowsMediaPlayer();
var clip = player.newMedia(filePath);
Console.WriteLine(TimeSpan.FromSeconds(clip.duration));

и не забудьте добавить ссылку wmp.dll, которая будет находиться в папке System32.

person Rish    schedule 02.09.2016