.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();
- }
- }
- }
复制代码
来源:https://www.cnblogs.com/lxhbky/p/18326367
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
|
|
|
发表于 2024-7-27 07:23:46
举报
回复
分享
|
|
|
|