2008-09-30 3 views
26

Я ищу для реализации функции, которая извлекает один кадр из входного видео, поэтому я могу использовать его как миниатюру.Как получить миниатюру видео в .Net?

Что-то вдоль этих линий должно работать:

// filename examples: "test.avi", "test.dvr-ms" 
// position is from 0 to 100 percent (0.0 to 1.0) 
// returns a bitmap 
byte[] GetVideoThumbnail(string filename, float position) 
{ 
} 

Кто-нибудь знает, как сделать это в .NET 3.0?

Правильное решение будет «наилучшей» реализацией этой функции. Бонусные баллы за исключение выбора пустых кадров.

+0

любой полный кислый образец кода кода? – Kiquenet 2013-11-29 18:36:24

ответ

10

Я закончил свой собственный самостоятельный класс (с единственным описанным мной методом), источником может быть viewed here. Media browser is GPL, но я доволен кодом, который я написал для этого файла, чтобы быть общедоступным. Имейте в виду, что он использует interop от проекта directshow.net, поэтому вам придется очистить эту часть кода от них.

Этот класс не будет работать для файлов DVR-MS, вам необходимо ввести фильтр прямого шоу для них.

+0

Привет - это действительно полезно, но я получаю некоторые проблемы без каких-либо фактических ошибок. Для файлов WMV (которые не поддерживаются) я получаю выходной поток от вызова IMediaDet.get_OutputStreams(), но IMediaDet.WriteBitmapBits() ничего не делает. Однако для файлов AVI вызов IMediaDet.get_OutputStreams() ничего не возвращает, и поэтому метод просто возвращается, ничего не делая. Я исключил проблемы с файлами ввода-вывода и разрешения и т. Д. (Одно и то же приложение загружает видео, и, как уже упоминалось, также получает выходной поток для определенных форматов). Любые указатели/предложения, которые у вас могут быть, были бы замечательными! – user369142 2012-11-14 23:33:51

+0

лично я бы посмотрел на ffdshow сейчас, интерфейсы прямого представления MS настолько трясутся – 2012-11-15 10:35:21

0

Есть некоторые библиотеки в www.mitov.com, которые могут помочь. Это универсальная оболочка для функций Directshow, и я думаю, что в одной из демонстраций показано, как взять кадр из видеофайла.

2

1- Получить последнюю версию ffmpeg.exe от: http://ffmpeg.arrozcru.org/builds/

2 Извлеките файл и скопировать ffmpeg.exe на свой веб-сайт

3 Используйте этот код:

Process ffmpeg; 

string video; 
string thumb; 

video = Server.MapPath("first.avi"); 
thumb = Server.MapPath("frame.jpg"); 

ffmpeg = new Process(); 

ffmpeg.StartInfo.Arguments = " -i "+video+" -ss 00:00:07 -vframes 1 -f image2 -vcodec mjpeg "+thumb; 
ffmpeg.StartInfo.FileName = Server.MapPath("ffmpeg.exe"); 
ffmpeg.Start(); 
Смежные вопросы