.net core使用Xabe.FFmpeg包获取视频首帧预览图

打印 上一主题 下一主题

主题 873|帖子 873|积分 2619

  简要阐明需求:你有一个网络视频资源(http地址)或者上传的视频文件,怎么将视频资源的某一帧的画面生成图片对象保存呢?
  要点:
    1. 首先你需要将视频资源保存到你的服务器某个指定目录里;
    2. 使用.net core里的包安装核心处理包:Xabe.FFmpeg,依赖包:Xabe.FFmpeg.Downloader可以选择性安装(依赖包重要解决处理包的执行情况)
    核心包官网:Docs | Xabe.FFmpeg
    3. 根据包示例编写核心代码:
 
  1. using Microsoft.AspNetCore.Mvc;
  2. using Xabe.FFmpeg;
  3. namespace WebApplication1.Controllers
  4. {
  5.     public class HomeController : Controller
  6.     {
  7.         private readonly ILogger<HomeController> logger;
  8.         private readonly IHostingEnvironment hostingEnvironment;
  9.         public HomeController(
  10.             ILogger<HomeController> logger,
  11.             IHostingEnvironment hostingEnvironment)
  12.         {
  13.             this.logger = logger;
  14.             this.hostingEnvironment = hostingEnvironment;
  15.         }
  16.         public async Task<IActionResult> Index()
  17.         {
  18.             //设置windows环境下依赖包的目录(依赖包核心文件:ffmpeg.exe,ffplay.exe,ffprobe.exe)
  19.             FFmpeg.SetExecutablesPath(this.hostingEnvironment.ContentRootPath);
  20.             /* 如果你是在windows里实验,且你的项目里没有依赖包核心文件,则放开下行代码
  21.             # 添加视频处理核心文件
  22.             await FFmpegDownloader.GetLatestVersion(FFmpegVersion.Official);
  23.             */
  24.             /* 如果你是在Docker环境里运行,请再Dockerfile里添加下行代码
  25.             # 添加视频处理核心文件
  26.             RUN apt-get install - y ffmpeg
  27.             */
  28.             // 如果你是在linux里运行,直接使用命令安装:apt-get update && apt-get install - y ffmpeg
  29.             //视频文件路径
  30.             string videoPath = $@"{this.hostingEnvironment.ContentRootPath}\normal video.mp4";
  31.             //读取视频数据
  32.             IMediaInfo info = await FFmpeg.GetMediaInfo(videoPath).ConfigureAwait(false);
  33.             IVideoStream? videoStream = info.VideoStreams.First()?.SetCodec(VideoCodec.png);
  34.             //生成图片
  35.             string videoPreviewImagePath = $"output/images/c.png";
  36.             IConversionResult conversionResult = await FFmpeg.Conversions.New()
  37.                 .AddStream(videoStream)
  38.                 .ExtractNthFrame(1, (x) => videoPreviewImagePath)
  39.                 .Start();
  40.             Console.WriteLine("视频第一帧图片已提取到目录:" + videoPreviewImagePath);  
  41.             return View();
  42.         }
  43.     }
  44. }
复制代码
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

九天猎人

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表