Как я могу сохранить первый кадр видео как изображение?
Я хочу извлечь первый кадр загруженного видео и сохранить его как файл изображения.
Возможные форматы видео: mpeg, avi и wmv.
Еще одна вещь, которую следует учитывать, - это то, что мы создаем сайт ASP.NET.
3 ответа
Вы можете использовать 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-оболочку.
Попробуйте сделать формат строки аргумента следующим образом:
ffmpeg.StartInfo.Arguments =" -i c:\MyPath\MyVideo -vframes 1 c:\MyOutputPath\MyImage%d.jpg"
Вместо
ffmpeg.StartInfo.Arguments = " -i " + input+ (parametri != null? " "+parametri:"")+" "+output;
в коде ответа, указанном выше.
Я не знаю, в чем причина, но вторая упомянутая строка аргумента не работает на моей машине, тогда как когда я менял аргумент, как первая команда, он работает нормально.
Вероятно, лучший инструмент для программной работы с видео - это FFMpeg. Он поддерживает многие форматы, даже WMV. Я подозреваю, что для этого есть даже .net-оболочка.