Как я могу сохранить первый кадр видео как изображение? - PullRequest
10 голосов
/ 26 августа 2010

Я хочу извлечь первый кадр загруженного видео и сохранить его как файл изображения.
Возможные форматы видео: mpeg, avi и wmv.

Еще одна вещь, которую следует учитывать, - это то, что мы создаем сайт ASP.NET.

Ответы [ 3 ]

6 голосов
/ 26 августа 2010

Вы можете использовать FFMPEG как отдельный процесс (самый простой способ) и позволить ему декодировать первый IDR для вас.Здесь у вас есть класс FFMPEG с методом GetThumbnail (), которому вы передаете адрес видеофайла, адрес создаваемого изображения JPEG и разрешение, которое вы хотите, чтобы изображение было:

using System.Diagnostics;
using System.Threading; 

public class FFMPEG
{
    Process ffmpeg;

    public void exec(string input, string output, string parametri)
    {
        ffmpeg = new Process();

        ffmpeg.StartInfo.Arguments = " -i " + input+ (parametri != null? " "+parametri:"")+" "+output; 
        ffmpeg.StartInfo.FileName = "utils/ffmpeg.exe";
        ffmpeg.StartInfo.UseShellExecute = false;
        ffmpeg.StartInfo.RedirectStandardOutput = true;
        ffmpeg.StartInfo.RedirectStandardError = true;
        ffmpeg.StartInfo.CreateNoWindow = true;

        ffmpeg.Start();
        ffmpeg.WaitForExit();
        ffmpeg.Close();     
    }


    public void GetThumbnail(string video, string jpg, string velicina)
    {
        if (velicina == null) velicina = "640x480";
        exec(video, jpg, "-s "+velicina);
    }
}

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

FFMPEG f = new FFMPEG();
f.GetThumbnail("videos/myvid.wmv", "images/thumb.jpg", "1200x223");

Чтобы это работало, вы должны иметь ffmpeg.exe в папке / utils или изменить код, чтобы найти ffmpeg.exe.

Есть и другие способыиспользуйте FFMPEG в .NET, как оболочки .NET, вы можете найти их в Google.Они в основном делают то же самое здесь, только лучше.Поэтому, если FFMPEG выполнит вашу работу, я бы рекомендовал использовать .NET wrapper.

3 голосов
/ 22 февраля 2012

Попробуйте сделать формат строки аргумента следующим образом:

ffmpeg.StartInfo.Arguments =" -i c:\MyPath\MyVideo -vframes 1 c:\MyOutputPath\MyImage%d.jpg"

Вместо

ffmpeg.StartInfo.Arguments = " -i " + input+ (parametri != null? " "+parametri:"")+" "+output;

в приведенном выше коде ответа.

Я не знаю, чтобыла причина, но вторая упомянутая строка аргумента не работает на моей машине, тогда как, когда я изменил аргумент, как первая команда, он работает нормально.

0 голосов
/ 26 августа 2010

Вероятно, лучший инструмент для программной работы с видео - это FFMpeg. Он имеет поддержку многих форматов, даже WMV. Я подозреваю, что для этого есть даже .net-оболочка .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...