Работая над системой управления видеоконтентом, мне нужно было захватывать кадры из видеофайлов, чтобы их можно было использовать в качестве предварительного просмотра для видео. В системе уже был некоторый код, но он работал только для кодирования видео в формате Windows Media (расширение .wmv). Это не будет, я думал, не в наши дни, когда у нас так много форматов файлов и видеокодеков. Поэтому мне нужно иметь возможность:
- Захват видеокадров из кода .NET
- Захват изображения из всех видов видео форматов
- Не изобретать велосипед, выполняя # 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 для Windows с http://www.mplayerhq.hu/design7/dload.html
- 1 загрузка пакета двоичных кодеков MPlayer для Windows с http://www.mplayerhq.hu/design7/dload.html
- 1 MPlayer .NET-оболочка, представленная в этой статье
Настроить
- Извлеките исполняемый файл mPlayer (mplayer.exe)
- Извлеките кодеки mPlayer в каталог с именем «codecs» в том же каталоге, что и исполняемый файл mPlayer.
- Добавить ссылку на проект 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)
- Используя различные методы захвата:
- captureFramesWithInterval — по умолчанию захватывает кадр каждые 5 секунд до 12 кадров
- 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