.net core使用Xabe.FFmpeg包获取视频首帧预览图
简要说明需求:你有一个网络视频资源(http地址)或者上传的视频文件,怎么将视频资源的某一帧的画面生成图片对象保存呢?
要点:
1. 首先你需要将视频资源保存到你的服务器某个指定目录里;
2. 使用.net core里的包安装核心处理包:Xabe.FFmpeg,依赖包:Xabe.FFmpeg.Downloader可以选择性安装(依赖包主要解决处理包的执行环境)
核心包官网:Docs | Xabe.FFmpeg
3. 根据包示例编写核心代码:
using Microsoft.AspNetCore.Mvc; using Xabe.FFmpeg; namespace WebApplication1.Controllers { public class HomeController : Controller { private readonly ILogger<HomeController> logger; private readonly IHostingEnvironment hostingEnvironment; public HomeController( ILogger<HomeController> logger, IHostingEnvironment hostingEnvironment) { this.logger = logger; this.hostingEnvironment = hostingEnvironment; } public async Task<IActionResult> Index() { //设置windows环境下依赖包的目录(依赖包核心文件:ffmpeg.exe,ffplay.exe,ffprobe.exe) FFmpeg.SetExecutablesPath(this.hostingEnvironment.ContentRootPath); /* 如果你是在windows里实验,且你的项目里没有依赖包核心文件,则放开下行代码 # 添加视频处理核心文件 await FFmpegDownloader.GetLatestVersion(FFmpegVersion.Official); */ /* 如果你是在Docker环境里运行,请再Dockerfile里添加下行代码 # 添加视频处理核心文件 RUN apt-get install - y ffmpeg */ // 如果你是在linux里运行,直接使用命令安装:apt-get update && apt-get install - y ffmpeg //视频文件路径 string videoPath = $@"{this.hostingEnvironment.ContentRootPath}\normal video.mp4"; //读取视频数据 IMediaInfo info = await FFmpeg.GetMediaInfo(videoPath).ConfigureAwait(false); IVideoStream? videoStream = info.VideoStreams.First()?.SetCodec(VideoCodec.png); //生成图片 string videoPreviewImagePath = $"output/images/c.png"; IConversionResult conversionResult = await FFmpeg.Conversions.New() .AddStream(videoStream) .ExtractNthFrame(1, (x) => videoPreviewImagePath) .Start(); Console.WriteLine("视频第一帧图片已提取到目录:" + videoPreviewImagePath); return View(); } } }
*感谢您的阅读。喜欢的、有用的就请大哥大嫂们高抬贵手“推荐一下”吧!你的精神 支持是博主强大的写作动力。欢迎转载!
*博主的文章是自己平时开发总结的经验,由于博主的水平不高,不足和错误之处在所难免,希望大家能够批评指出。
*我的博客: http://www.cnblogs.com/lxhbky/
*博主的文章是自己平时开发总结的经验,由于博主的水平不高,不足和错误之处在所难免,希望大家能够批评指出。
*我的博客: http://www.cnblogs.com/lxhbky/