ffmpeg C# 切第一秒的有图片
原创
©著作权归作者所有:来自51CTO博客作者wx62c572815b406的原创作品,请联系作者获取转载授权,否则将追究法律责任
外部插件:(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 "";
}
}
}
}
如果明发到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命令就可以发现可以使用了。