ASP.NET下调用ffmpeg与mencoder实现视频转换截屏
最近要做一个视频播放的系统,用到了ffmpeg和mencoder两个工具,查了一些资料,发现这方面的资料还挺多的,但是就是乱了一点,我自己从头整理了一下,和大家分享一下:
1、ffmpeg实现视频(avi,wmv等格式)转换为flv格式:
/// <summary>
/// 转换视频为flv
/// </summary>
/// <param name="fileName">上传视频文件的路径(原文件)</param>
/// <param name="playFile">转换后的文件的路径(网络播放文件)</param>
/// <returns>成功:返回1 失败:0</returns>
public int FChangeFileVir(string fileName, string playFile)
{
//转换后视频高宽
string widthOfFile = "";
string heightOfFile = "";
//取得ffmpeg.exe的路径,路径配置在Web.Config中,如:<add key="ffmpeg" value="E:\aspx1\ffmpeg.exe" />
string ffmpeg = Server.MapPath(PublicMethod.ffmpegtool);
if ((!System.IO.File.Exists(ffmpeg)) || (!System.IO.File.Exists(fileName)))
{
return ;
} //获得(.flv)文件相对路径
string flv_file = System.IO.Path.ChangeExtension(Server.MapPath(playFile), ".flv");
//建立ffmpeg进程
System.Diagnostics.ProcessStartInfo FilestartInfo = new System.Diagnostics.ProcessStartInfo(ffmpeg);
//设置后台运行,不显示窗口
FilestartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
//运行参数,此处组合成ffmpeg.exe文件需要的参数即可,此处命令在ffmpeg 0.4.9以上调试通过
//ffmpeg -i F:\01.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\test.flv
FilestartInfo.Arguments = " -i " + fileName + " -ab 56 -ar 22050 -b 500 -r 15 -s " + widthOfFile + "x" + heightOfFile + " " + flv_file;
try
{
//开始转换
System.Diagnostics.Process.Start(FilestartInfo);
}
catch
{
return ;
} return ;
}
2、mencoder实现视频(avi,wmv等格式)转换为flv格式:
/// <summary>
/// 转换视频为flv
/// </summary>
/// <param name="fileName">上传视频文件的路径(原文件)</param>
/// <param name="playFile">转换后的文件的路径(网络播放文件)</param>
/// <returns>成功:返回1 失败:0</returns>
public int MChangeFileVir(string fileName, string playFile)
{
//转换后视频高宽
string widthOfFile = "";
string heightOfFile = "";
//取得mencoder.exe的路径,路径配置在Web.Config中,如:<add key="mencoder" value="E:\aspx1\mencoder.exe" />
string tool = Server.MapPath(PublicMethod.mencodertool);
//判断mencoder工具与文件是否存在
if ((!System.IO.File.Exists(ffmpeg)) || (!System.IO.File.Exists(fileName)))
{
return ;
} //获得(.flv)文件相对路径
string flv_file = System.IO.Path.ChangeExtension(Server.MapPath(playFile), ".flv");
//建立工具进程
System.Diagnostics.ProcessStartInfo FilestartInfo = new System.Diagnostics.ProcessStartInfo(tool);
//设置后台运行
FilestartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
//运行参数
FilestartInfo.Arguments = " " + vFileName + " -o " + flv_file + " -of lavf -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames -oac mp3lame -lameopts abr:br=56 -ovc lavc -lavcopts vcodec=flv:vbitrate=200:mbd=2:mv0:trell:v4mv:cbp:last_pred=1:dia=-1:cmp=0:vb_strategy=1 -vf scale=" + widthOfFile + ":" + heightOfFile + " -ofps 12 -srate 22050";
try
{
//开始转换
System.Diagnostics.Process.Start(FilestartInfo);
}
catch
{
return ;
} return ;
}
3、ffmpeg实现视频内容:
//视频截图,fileName视频地址,imgFile图片地址
public string CatchImg(string fileName, string imgFile)
{
//使用ffmpeg抓图
string ffmpeg = Server.MapPath(PublicMethod.ffmpegtool);
//图片名称
string flv_img = imgFile + ".jpg";
//图片大小
string FlvImgSize = PublicMethod.sizeOfImg;
//建立ffmpeg进程
System.Diagnostics.ProcessStartInfo ImgstartInfo = new System.Diagnostics.ProcessStartInfo(ffmpeg);
//后台运行
ImgstartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
//进程参数
//ffmpeg -i input.flv -y -f image2 -ss 10.11 -t 0.001 -s 240x180 catchimg.jpg;
ImgstartInfo.Arguments = " -i " + fileName + " -y -f image2 -ss 2 -vframes 1 -s " + FlvImgSize + " " + flv_img;
try
{
//开始抓图
System.Diagnostics.Process.Start(ImgstartInfo);
//睡眠一下,等待截图完成,按需设置
System.Threading.Thread.Sleep();
}
catch
{
return "";
}
//
if (System.IO.File.Exists(flv_img))
{
return flv_img;
} return "";
}
原理很简单,其实就是使用System.Diagnostics.Process调用ffmpeg和mencoder这两个现成的工具来进行工作,关键是参数传递,主要还是看咱对ffmpeg和mencoder使用的熟悉程度。
ASP.NET下调用ffmpeg与mencoder实现视频转换截屏的更多相关文章
- asp.net下调用Matlab生成动态链接库
对于这次论文项目,最后在写一篇关于工程的博客,那就是在asp.net下调用matlab生成的dll动态链接库.至今关于matlab,c/c++(opencv),c#(asp.net)我总共写了4篇配置 ...
- asp.net实现调用ffmpeg实现视频格式的转换
视频格式转换的函数 //视频转换 public void VideoConvertFlv(string FromName, string ExportName) { string ffmpeg = H ...
- java使用ffmpeg和mencoder做视频格式转换
首发:个人博客,持续更新和纠错 主要使用技术:1)FFmpeg,用于主流格式之间的转换,例如AVI,MP4,FLV等.2)MEncoder,用于奇葩格式转主流格式,例如RMVB转AVI.这样我们可以把 ...
- java调用FFmpeg及mencoder转换视频为FLV并截图
Conver.java package com.ll19.flv; public class Conver { public void run() { try { // 转换并截图 String fi ...
- NET 2.0(C#)调用ffmpeg处理视频的方法
另外:ffmpeg的net封装库 http://www.intuitive.sk/fflib/ NET 2.0 调用FFMPEG,并异步读取输出信息的代码...public void ConvertV ...
- 用java程序调用ffmpeg执行视频文件格式转换flv
用java小例题说明更直观:(可以直接编译运行)环境我在windows平台下测试的...需要在e:/下有ffmpeg.exe;mencoder.exe;drv43260.dll;pncrt.dll共4 ...
- Linux下用FFMPEG采集usb摄像头到RTMP
Linux下用 FFMPEG 采集 usb摄像头视频 和 摄像头内置麦克风音频 到RTMP服务 ffmpeg -f video4linux2 -qscale 10 -r 12 -s 640x480 ...
- java 实现视频转换通用工具类:视频相互转换-Ffmpeg(三)
java 实现视频转换通用工具类:获取视频元数据信息(一) java 实现视频转换通用工具类:视频相互转换-总方法及Mencoder(二) 这节主要是ffmpeg的相关方法封装,在实际调用中主要使用f ...
- java 实现视频转换通用工具类:视频相互转换-总方法及Mencoder(二)
1.自动判断格式并调用相应的转换工具,默认方法 /** * 自动判断格式并调用相应的转换工具,默认方法 * @param srcVideoPath * @param tarVideoPath * @r ...
随机推荐
- php 02
变量的数据类型 一.类型 标量类型: 布尔型 整型 浮点型 字符串 复合类型: 数组 对象 特殊类型: 资源 null 1. 布尔型 true false 以下值认为是false 其他值都认 ...
- IUserStore------Implements Diagram
- 【转发活动】Hey, 是你吗? | 寻"粉"启示
你知道吗 从 A computer on every desk and in every home 让每张办公桌上和每个家庭都有一台计算机 ▼ 到 Where do you want to go to ...
- linux 命令——52 ifconfig(转)
许多windows非常熟悉ipconfig命令行工具,它被用来获取网络接口配置信息并对此进行修改.Linux系统拥有一个类似的工具,也就是ifconfig(interfaces config).通常需 ...
- linux 命令——31 /etc/group文件(转)
Linux /etc/group文件与/etc/passwd和/etc/shadow文件都是有关于系统管理员对用户和用户组管理时相关的文件. linux /etc/group文件是有关于系统管理员对用 ...
- windows剪切板暂存
其实最初是因为在项目中使用了html网页编辑器,通过ie的com组件和javascript通讯完成一些事情,其中有一个功能是插入表格,我们原本使用的range.pasteHTML(HTMLstr);根 ...
- Atom打造轻量化C/C++ IDE
写在前面 近期沉迷Atom的颜值无法自拔,在github的光环下,Atom凭借自身良好的素质,获得了大量开发者的青睐.随之而来的就是丰富的插件库,在插件帮助下,它对各种编程语言都有相当好的支持.对与一 ...
- 关于profile集合
profile集合是mongodb的慢操作日志 > db.getProfilingStatus() { , , } 可以通过getProfilingStatus来查看当前profile设置 pr ...
- python __getattr__ __setattr__
class Rectangle: def __init__(self): self.width = 0 self.height = 0 def __setattr__(self, key, value ...
- 删除临时文件的bat文件
@echo offecho 正在清除系统垃圾文件,请稍等......del /f /s /q %systemdrive%\*.tmpdel /f /s /q %systemdrive%\*._mpde ...