asp.net mvc 利用ffmpeg对视频进行转码成H264的mp4和截图
学习了关于ffmpeg的操作,由于大部分视频播放插件已经不支持flv格式,而且html5的流行,在视频播放方面mp4格式使用得越来越多,所以接下来我将网上所学知识进行了整理,方便大家以后更容易使用。
第一步首先在网上下载ffmpeg.exe程序,并保存到工程目录中。
接下来上代码
public class HomeController : Controller
{
// GET: Home
//文件路径
public static string ffmpegtool = "/Content/ffmpeg/ffmpeg.exe";
public static string upFile = "/Content/oldVideo" + "/";//上传文件夹
public static string imgFile = "/Content/ImgFile" + "/";//图片文件夹
public static string playFile = "/Content/newVideo" + "/";//mp4文件夹
public static string sizeOfImg = "600x400";//截取图片的宽与高
public static string GetFileName(string fileName)
{
int i = fileName.LastIndexOf("\\") + 1;
string Name = fileName.Substring(i);
return Name;
}
//获取文件扩展名
public static string GetExtension(string fileName)
{
int i = fileName.LastIndexOf(".") + 1;
string Name = fileName.Substring(i);
return Name;
}
//
/// <summary>
/// 转换文件并保存在指定文件夹下面(这里是相对路径)
/// </summary>
/// <param name="fileName">上传视频文件的路径(视频原文件)</param>
/// <param name="imgFile">转换后的文件的路径(视频图片截图)</param>
/// <returns>成功:返回图片地址; 失败:返回空字符串</returns>
public string CatchImg(string fileName, string imgFile)
{
//
string ffmpeg = Server.MapPath(ffmpegtool);
//
//
string FlvImgSize = sizeOfImg;
//
System.Diagnostics.ProcessStartInfo ImgstartInfo = new System.Diagnostics.ProcessStartInfo(ffmpeg);
ImgstartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
//
ImgstartInfo.Arguments = " -i " + fileName + " -y -f image2 -ss 2 -vframes 1 -s " + FlvImgSize + " " + imgFile;
try
{
System.Diagnostics.Process.Start(ImgstartInfo);
}
catch
{
return "";
}
//
if (System.IO.File.Exists(imgFile))
{
return imgFile;
}
return "";
}
/// <summary>
/// 转换文件并保存在指定文件夹下面(这里是相对路径)
/// </summary>
/// <param name="fileName">上传视频文件的路径(原文件)</param>
/// <param name="playFile">转换后的文件的路径(网络播放文件)</param>
/// <param name="newfile">转换后的文件名称</param>
public void ChangeFileVir(string fileName, string playFile, string newfile)
{
//取得ffmpeg.exe的路径
string ffmpeg = Server.MapPath(ffmpegtool);
//获取要转换的文件路径
string filejuedui = Server.MapPath(fileName);
if ((!System.IO.File.Exists(ffmpeg)) || (!System.IO.File.Exists(filejuedui)))
{
return;
}
string FlvImgSize = sizeOfImg;
System.Diagnostics.ProcessStartInfo FilestartInfo = new System.Diagnostics.ProcessStartInfo(ffmpeg);
FilestartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
//此处组合成ffmpeg.exe文件需要的参数即可,此处命令在ffmpeg 0.4.9调试通过
FilestartInfo.Arguments = " -i " + filejuedui + " -c:v libx264 -strict -2 " + newfile;
try
{
System.Diagnostics.Process ps = new System.Diagnostics.Process();
ps.StartInfo = FilestartInfo;
ps.Start();
}
catch (Exception e)
{
}
}
public ActionResult Index()
{
string uploadFile = Server.MapPath(upFile) + "1.avi";//要转换的文件路径
string newimgFIle = Server.MapPath(imgFile) + "2.jpg";//截图图片保存路径
string newFile = Server.MapPath(playFile) + "2.mp4";//转换后的文件路径
CatchImg(uploadFile, newimgFIle);//截图
//ChangeFileVir()参数说明 1.原文件夹相对路径 2.转换后存储的文件夹 3.转换后的文件路径
ChangeFileVir(upFile + "1.avi", playFile, newFile);//视频转换
return View();
}
}
下面是工程目录: