我想显示我网站上列出的视频的缩略图,我想从视频中获取单帧(从特定时间开始)并将其显示为缩略图.
我试过这个http://ramcrishna.blogspot.com/2008/09/playing-videos-like-youtube-and.html但是没有用.
这可能是使用.NET C#吗?
Vit*_*nko 60
FFMpeg是一个正确的工具,可用于在某个位置提取视频帧.您可以如上所述调用ffmpeg.exe,或者只使用现有的.NET包装器(如.NET转换器(免费),只需一行代码即可获得缩略图:
var ffMpeg = new NReco.VideoConverter.FFMpegConverter();
ffMpeg.GetVideoThumbnail(pathToVideoFile, thumbJpegStream,5);
Run Code Online (Sandbox Code Playgroud)
mar*_*d13 16
您可以以编程方式执行FFmpeg以生成缩略图图像文件.然后打开图像文件以便随意使用它.
以下是一些示例代码:
public static Bitmap GetThumbnail(string video, string thumbnail)
{
var cmd = "ffmpeg -itsoffset -1 -i " + '"' + video + '"' + " -vcodec mjpeg -vframes 1 -an -f rawvideo -s 320x240 " + '"' + thumbnail + '"';
var startInfo = new ProcessStartInfo
{
WindowStyle = ProcessWindowStyle.Hidden,
FileName = "cmd.exe",
Arguments = "/C " + cmd
};
var process = new Process
{
StartInfo = startInfo
};
process.Start();
process.WaitForExit(5000);
return LoadImage(thumbnail);
}
static Bitmap LoadImage(string path)
{
var ms = new MemoryStream(File.ReadAllBytes(path));
return (Bitmap)Image.FromStream(ms);
}
Run Code Online (Sandbox Code Playgroud)
小智 6
Xabe.FFmpeg-免费,开源和跨平台库。为FFmpeg提供流畅的API。从Xabe.F中的视频生成缩略图
string output = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + FileExtensions.Png);
IConversionResult result = await Conversion.Snapshot(Resources.Mp4WithAudio, output, TimeSpan.FromSeconds(0))
.Start();
Run Code Online (Sandbox Code Playgroud)
像其他答案一样,它需要FFmpeg可执行文件,但是您可以通过以下方式下载它
FFmpeg.GetLatestVersion();
Run Code Online (Sandbox Code Playgroud)
此处提供完整文档-Xabe.FFmpeg文档
因为人们不想在商业软件中使用 FFMpeg 作为它的麻烦。我这里有一个旧的解决方案:
ShellFile shellFile = ShellFile.FromFilePath(VideoFileName);
Bitmap bm = shellFile.Thumbnail.Bitmap;
Run Code Online (Sandbox Code Playgroud)
然后你会得到一个可以用于绘图的 Bitmap 对象。如果你想要一个文件,只需执行以下操作:
bm.Save(fileName, System.Drawing.Imaging.ImageFormat.Jpeg);
Run Code Online (Sandbox Code Playgroud)
如果您想要一个可以在 Xaml 绑定中使用它的 BitmapImage。只需将 Bitmap 传输到 BitmapImage。下面是一个例子:
public static BitmapImage ConvertBitmapToBitmapImage(Bitmap bitmap)
{
MemoryStream ms = new MemoryStream();
bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
BitmapImage image = new BitmapImage();
image.BeginInit();
ms.Seek(0, SeekOrigin.Begin);
image.StreamSource = ms;
image.EndInit();
return image;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
44070 次 |
| 最近记录: |