最近要做一个视频播放的系统,用到了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实现视频转换截屏的更多相关文章

  1. asp.net下调用Matlab生成动态链接库

    对于这次论文项目,最后在写一篇关于工程的博客,那就是在asp.net下调用matlab生成的dll动态链接库.至今关于matlab,c/c++(opencv),c#(asp.net)我总共写了4篇配置 ...

  2. asp.net实现调用ffmpeg实现视频格式的转换

    视频格式转换的函数 //视频转换 public void VideoConvertFlv(string FromName, string ExportName) { string ffmpeg = H ...

  3. java使用ffmpeg和mencoder做视频格式转换

    首发:个人博客,持续更新和纠错 主要使用技术:1)FFmpeg,用于主流格式之间的转换,例如AVI,MP4,FLV等.2)MEncoder,用于奇葩格式转主流格式,例如RMVB转AVI.这样我们可以把 ...

  4. java调用FFmpeg及mencoder转换视频为FLV并截图

    Conver.java package com.ll19.flv; public class Conver { public void run() { try { // 转换并截图 String fi ...

  5. NET 2.0(C#)调用ffmpeg处理视频的方法

    另外:ffmpeg的net封装库 http://www.intuitive.sk/fflib/ NET 2.0 调用FFMPEG,并异步读取输出信息的代码...public void ConvertV ...

  6. 用java程序调用ffmpeg执行视频文件格式转换flv

    用java小例题说明更直观:(可以直接编译运行)环境我在windows平台下测试的...需要在e:/下有ffmpeg.exe;mencoder.exe;drv43260.dll;pncrt.dll共4 ...

  7. Linux下用FFMPEG采集usb摄像头到RTMP

    Linux下用 FFMPEG 采集 usb摄像头视频 和 摄像头内置麦克风音频 到RTMP服务   ffmpeg -f video4linux2 -qscale 10 -r 12 -s 640x480 ...

  8. java 实现视频转换通用工具类:视频相互转换-Ffmpeg(三)

    java 实现视频转换通用工具类:获取视频元数据信息(一) java 实现视频转换通用工具类:视频相互转换-总方法及Mencoder(二) 这节主要是ffmpeg的相关方法封装,在实际调用中主要使用f ...

  9. java 实现视频转换通用工具类:视频相互转换-总方法及Mencoder(二)

    1.自动判断格式并调用相应的转换工具,默认方法 /** * 自动判断格式并调用相应的转换工具,默认方法 * @param srcVideoPath * @param tarVideoPath * @r ...

随机推荐

  1. kickstart2019 round_C B. Circuit Board

    思路: 这题应该不止一种解法,其中的一种可以看作是leetcode85https://www.cnblogs.com/wangyiming/p/11059176.html的加强版: 首先对于每一行,分 ...

  2. h5新增属性本地存储

    ---恢复内容开始--- 存储的两种类型: localStorage 和 sessionStorage localstorage:没有时间限制的数据存储 sessionStorage  针对一个ses ...

  3. Java图形界面开发—简易记事本

          在学习了Java事件之后,自己写了一个极其简单的记事本.用到了MenuBar,Menu,MenuITem等控件,事件包括ActionListener以及KeyListener. 代码如下: ...

  4. ArcGIS for Android 中实现要素绘制时固定MapView

    最近在项目中遇到这么一个情况,在MapView中要求实现绘制点.线.面. 在这里面就会遇到这么一个问题,绘制折线和多边形型时,每点击一个点屏幕就会跟着晃,使用起来很不方便(使用Note2 触控笔),所 ...

  5. iOS - 毛玻璃动画效果

    声明全局变量 #define kMainBoundsHeight ([UIScreen mainScreen].bounds).size.height //屏幕的高度 #define kMainBou ...

  6. 跨平台移动开发phonegap/cordova 3.3全系列教程-开发环境搭建

    操作系统:windwos xp 1.   安装JDK 打开如下网站下载JDK http://www.oracle.com/technetwork/java/javase/downloads/index ...

  7. 【转】如何在Git中撤销一切

    翻译:李伟 审校:张帆译自:Github 任何一个版本控制系统中,最有用的特性之一莫过于 “撤销(undo)”操作.在Git中,“撤销”有很多种含义. 当你完成了一次新的提交(commit),Git会 ...

  8. redis在Windows下以后台服务一键搭建集群(多机器)

    redis在Windows下以后台服务一键搭建集群(多机器) 一.概述 此教程介绍如何在windows系统中多台机器之间布置redis集群,同时要以后台服务的模式运行.布置以脚本的形式,一键完成.多台 ...

  9. Redis 优缺点

    REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统. Redis是一个开源的使用ANSI C语言编写.遵守B ...

  10. hive 报错FAILED: Error in metadata: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient FAILED: Execu

    使用hive一段时间以后,今天在使用的时候突然报错,如下: hive> show databases;FAILED: Error in metadata: java.lang.RuntimeEx ...