ffmpeg C# 切第一秒的有图片
外部插件:(http://ffmpeg.org/download.html)
FfmpegHelper.cs 文件
using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Service { public static class FfmpegHelper { /// <summary> /// 从视频画面中截取一帧画面为图片 /// </summary> /// <param name="videoName">视频文件路径pic/123.MP4</param> /// <param name="cutTimeFrame">开始截取的时间如:"1s"</param> /// <param name="widthAndHeight">图片的尺寸如:240*180</param> /// <returns>返回图片保存路径</returns> public static string GetPicFromVideo(string videoName, string imageFile = "", string cutTimeFrame= "1s", string imagePath = "/CoverImage/ProjectEvent/", string widthAndHeight="") { var vdoName = videoName.Substring(videoName.LastIndexOf("/") + 1); //视频名称 例:260026077324.mp4 var fileName = vdoName.Split('.')[0];//视频名称 例:260026077324 string basePath = System.AppDomain.CurrentDomain.BaseDirectory;//获取当前路径 例:F:\TT\正式天台20171130\TTCloud\TTCloud.Website\ var ImgPath = basePath + imagePath.Replace("/", "\\"); //建立新文件夹路径 例F:\TT\20171130\TTCloud\TTCloud.Website\upload\Images\2020-04-20 //ffmpeg.exe路径 var ffmpeg = basePath + "\\ffmpeg\\ffmpeg.exe"; // 例:F:\TT\20171130\TTCloud\TTCloud.Website\bin\ffmpeg.exe var srcName = (File.Exists(videoName))? videoName.Replace("/", "\\") : basePath + videoName.Replace("/", "\\"); //视频路径 例:F:\TT\20171130\TTCloud\TTCloud.Website\\Upload\10000000\TTVideo\260026077324.mp4 if (!Directory.Exists(ImgPath)) { Directory.CreateDirectory(ImgPath); } //创建保存封面图片的路径 try { //保存截取图片后路径 var objName = ImgPath + "\\" + (string.IsNullOrEmpty(imageFile)? fileName: imageFile) + ".jpg"; ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.WindowStyle = ProcessWindowStyle.Hidden; startInfo.Arguments = " -i " + srcName //视频路径 + " -y -f image2 -ss " + cutTimeFrame //设置开始获取帧的视频时间 + " -t 0.001 "//-s " + widthAndHeight //设置图片的分辨率 + " " + objName; //输出的图片文件名,路径前必须有空格 startInfo.UseShellExecute = false; startInfo.CreateNoWindow = true; startInfo.FileName = ffmpeg; startInfo.WindowStyle = ProcessWindowStyle.Hidden; Process proc = new Process(); proc.StartInfo = startInfo; proc.Start(); proc.WaitForExit();//不等待完成就不调用此方法 proc.Close(); proc.Dispose(); return $"{imagePath}{fileName}.jpg"; } catch (Exception e) { return ""; } } } }
文件夹(ffmpeg)调试就放到Debug下面
如果明发到iis注意权限,windows servers 服务器注意要安装一个组件否则也切不了图
如果在发布的服务器实在找不到原因,就使用命令测试会报出问题:
d:\ffmpeg\ffmpeg.exe -i d:\ffmpeg\test.mp4 -y -f image2 -ss 1s -t 0.001 d:\ffmpeg\test.jpg
错误:
windows 2012 会提示找不到 MFPlat.DLL
搜索“MFPlat.DLL windows 2012”
解决方法:
最终解决办法是,通过server的服务器管理界面,添加功能角色
下图中,一直下一步到这里再下一步到功能界面,选择“文件和存储服务器”
功能列表里添加 用户界面》桌面体验
出现这个报错的原因就是没有安装windows media player这类功能软件,所以没法处理媒体文件
下一步,全部默认就可以,添加功能
还是默认,确定,安装
开始安装,等待安装完成
安装完成之后,有提示必须重启才能完成可以开始使用,到这一步就可以先去重启服务器
重启完服务器之后,重新远程登录,进去输入你要执行的ffmpeg命令就可以发现可以使用了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2016-01-05 随机数 字母 数字