Подтвердить что ты не робот

Как получить миниатюру видео в .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?

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

4b9b3361

Ответ 1

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

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

Ответ 3

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();

Ответ 4

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