Статьи

Как извлечь видео кадры с помощью MPlayer

Работая над системой управления видеоконтентом, мне нужно было захватывать кадры из видеофайлов, чтобы их можно было использовать в качестве предварительного просмотра для видео. В системе уже был некоторый код, но он работал только для кодирования видео в формате Windows Media (расширение .wmv). Это не будет, я думал, не в наши дни, когда у нас так много форматов файлов и видеокодеков. Поэтому мне нужно иметь возможность:

  1. Захват видеокадров из кода .NET
  2. Захват изображения из всех видов видео форматов
  3. Не изобретать велосипед, выполняя # 1 и # 2

Введите MPlayer

Украденный непосредственно со страницы информации MPlayer, «MPlayer — это проигрыватель фильмов, который работает во многих системах (см. Документацию). Он воспроизводит большинство MPEG / VOB, AVI, Ogg / OGM, VIVO, ASF / WMA / WMV, QT / MOV Файлы / MP4, RealMedia, Matroska, NUT , NuppelVideo, FLI, YUV4MPEG, FILM, RoQ, PVA, поддерживаемые многими собственными кодеками DLL, XAnim и Win32. Вы можете смотреть VideoCD, SVCD, DVD, 3ivx, DivX 3/4 / 5 и даже фильмы WMV .. «. Чтобы добавить мое собственное описание, MPlayer — это видеоплеер с открытым исходным кодом для командной строки.

Ну и что

У Metallica есть старая песня под названием «So What», отличная мелодия для металлических голов во всех нас. Ответ прост: MPlayer может сделать гораздо больше, чем просто воспроизвести видео. Он может захватывать изображения, передавать потоковое видео по протоколу http и даже перекодировать видео из одного формата в другой (но последняя функция является основанием для другой статьи).

Положить его вместе

Тебе понадобится:

Настроить

  1. Извлеките исполняемый файл mPlayer (mplayer.exe)
  2. Извлеките кодеки mPlayer в каталог с именем «codecs» в том же каталоге, что и исполняемый файл mPlayer.
  3. Добавить ссылку на проект mPlayerWrapper или скомпилированную DLL

использование

  • Захват с аргументами

    по умолчанию в C #

    // Specify the path to the video filestring videoFilePath = @"drive letter:\path\to\myVideo.mpg";// Declare the mplayer instance with the mplayer executable residing in the// same directory as your executablemPlayerWrapper mPlayerInstance = new mPlayerWrapper();// Capture framesmPlayerInstance.captureFrames(videoFilePath);    

    в VB.NET

    ' Specify the path to the video filedim videoFilePath As String = "drive letter:\path\to\myVideo.mpg"' Declare the mplayer instance with the mplayer executable residing in the' same directory as your executabledim mPlayerInstance As new mPlayerWrapper()' Capture framesmPlayerInstance.captureFrames(videoFilePath)    

    Это захватит 12 кадров с интервалом 5 секунд между каждым кадром и поместит их в ту же директорию, что и ваш видеофайл. Имя файла каждого кадра будет от «myVideo_thumb01.jpg» до «myVideo_thumb12.jpg». Каждый кадр будет масштабироваться до 270×200.

  • Захват аргументов

    • mPlayerPath — устанавливает путь, по которому находится исполняемый файл mPlayer (mplayer.exe). Значение по умолчанию находится в том же каталоге, в котором выполняется ваш код.
    • currentFilePath — устанавливает путь к файлу видео, который вы используете
    • cleanOutputDirectory — удаляет все изображения «jpg» в выходном каталоге захвата перед захватом
    • captureInterval — устанавливает интервал захвата кадров. Применяется только при использовании метода захвата временного интервала (как описано ниже)
    • numberOfFramesToCapture — количество кадров для захвата
    • captureExactNumberOfFrames — указывает оболочке попытаться захватить точное количество кадров, как указано свойством «numberOfFramesToCapture». Это можно использовать, если в файле слишком мало кадров, но вы все еще хотите получить точное число
    • useTimeSeekToCapture — используется для установки метода захвата оболочки для поиска по файлу вместо захвата кадра с интервалом
    • thumbnailPrefix — префикс, который будет использоваться при создании имен файлов для захваченных кадров. По умолчанию используется имя видео, к которому добавляется «_thumb», как в «myVideo_thumb01.jpg».
    • capturedFrameWidthHeight — ширина: высота, до которой будет масштабироваться каждый кадр. По умолчанию 270: 200
    • scaleCapturedFrames — используется вместе со свойством «capturedFrameWidthHeight» для уменьшения захваченных кадров. По умолчанию установлено значение true
  • Захват в другой выходной каталог
    в C #
    // Specify the path to the video filestring videoFilePath = @"drive letter:\path\to\myVideo.mpg";// Specify the output directorystring outputPath = @"drive letter:\path\to\output directory";// Declare the mplayer instance with the mplayer executable residing in the// same directory as your executablemPlayerWrapper mPlayerInstance = new mPlayerWrapper();// Capture framesmPlayerInstance.captureFrames(videoFilePath, outputPath);    

    в VB.NET

    ' Specify the path to the video filedim videoFilePath As String = "drive letter:\path\to\myVideo.mpg"' Specify the output directorydim outputPath As String = @"drive letter:\path\to\output directory"' Declare the mplayer instance with the mplayer executable residing in the' same directory as your executabledim mPlayerInstance As new mPlayerWrapper()' Capture framesmPlayerInstance.captureFrames(videoFilePath, outputDirectory)    
  • Используя различные методы захвата:

    1. captureFramesWithInterval — по умолчанию захватывает кадр каждые 5 секунд до 12 кадров
    2. captureFramesWithTimeSeek — по умолчанию захватывает 1 кадр каждую секунду до 12 кадров путем поиска по файлу

бонус

  • getFileProperties — возвращает SortedList свойств видео и аудио для файла
  • getAudioProperties — возвращает SortedList свойств звука для файла
  • getVideoProperties — возвращает SortedList свойств видео для файла

Загрузки

mPlayerWrapper: http://blog.tech-cats.net/examples/dotnet/mPlayerWrapper.dll
mPlayerWrapper Источник: http://blog.tech-cats.net/examples/dotnet/mplayerWrapper-v0.2.zip