首页 新闻 搜索 专区 学院

用ffmepg转FLV格式

0
悬赏园豆:50 [已解决问题] 解决于 2010-08-17 16:08

   System.Diagnostics.ProcessStartInfo FilestartInfo = new   System.Diagnostics.ProcessStartInfo(ffmpeg);

FilestartInfo.Arguments:里面的内容为下面那样:          

       -i F:\程序\Web\电影网\Cinema\Cinema\Admin\UpFiles\28_尚学堂马士兵_Struts2_结果类型_result_type_2.avi -ab 56 -ar 22050 -b 500 -r 15 -s 400×350 F:\程序\Web\电影网\Cinema\Cinema\Admin\PlayFiles\201008161930440598.flv

 

System.Diagnostics.Process.Start(FilestartInfo);       //开始转视频

 

没有出错,.....可是 为什么不能转FLV格式的呢? 我没找出错误来。。。

那个兄弟帮帮忙啊

winnerfat的主页 winnerfat | 初学一级 | 园豆:0
提问于:2010-08-16 19:37
< >
分享
最佳答案
0

#region //运行FFMpeg的视频解码,(这里是绝对路径)
/// <summary>
/// 转换文件并保存在指定文件夹下面(这里是绝对路径)
/// </summary>
/// <param name="fileName">上传视频文件的路径(原文件)</param>
/// <param name="playFile">转换后的文件的路径(网络播放文件)</param>
/// <param name="imgFile">从视频文件中抓取的图片路径</param>
/// <returns>成功:返回图片虚拟地址; 失败:返回空字符串</returns>
public string ChangeFilePhy(string fileName, string playFile, string imgFile)
{
//取得ffmpeg.exe的路径,路径配置在Web.Config中,如:<add key="ffmpeg" value="E:\51aspx\ffmpeg.exe" />
start = DateTime.Now;
string ffmpeg = ffmpegtool;
if ((!System.IO.File.Exists(ffmpeg)) || (!System.IO.File.Exists(fileName)))
{
return "";
}

//获得图片和(.flv)文件相对路径/最后存储到数据库的路径,如:/Web/User1/00001.jpg

string flv_file = System.IO.Path.ChangeExtension(playFile, ".flv");


//截图的尺寸大小,配置在Web.Config中,如:<add key="CatchFlvImgSize" value="240x180" />
string FlvImgSize = VideoToFlv.sizeOfImg;
System.Diagnostics.Process FilesProcess
= new System.Diagnostics.Process();
FilesProcess.StartInfo.FileName
= ffmpeg;
FilesProcess.StartInfo.WindowStyle
= System.Diagnostics.ProcessWindowStyle.Hidden;
FilesProcess.StartInfo.Arguments
= " -i " + fileName + " -ab 56 -ar 22050 -b 500 -r 30 -s " + widthOfFile + "x" + heightOfFile + " " + flv_file;
try
{
FilesProcess.Start();
while (!FilesProcess.HasExited)
{

}
//截图
CatchImg(fileName, imgFile);
WriteRunTime();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);

}
return "";
}
#endregion

 

 这个是我上次用过的,可以用,我测试过

收获园豆:30
jowo | 老鸟四级 |园豆:2834 | 2010-08-17 08:45
谢谢! 你的可以,,, 可是我写的和你写的,我看不出差别来,可是为什么你的就好使。。。 不过还是谢谢。。。 不过转换效果方面不是很理想,,,有什么办法解决呢。
winnerfat | 园豆:0 (初学一级) | 2010-08-17 09:47
转换不清晰,应该是和转换工具有关系,你去官网找下,看看有没有最新的,不过你还可以调整调整参数,呵呵,希望对你有帮助
jowo | 园豆:2834 (老鸟四级) | 2010-08-17 14:53
其他回答(3)
0

http://www.cnblogs.com/cyq1162/archive/2008/10/15/1311410.html

另外注意中文路径问题

http://www.cnblogs.com/wangpei/archive/2008/12/06/1349139.html

可能的难点:因为这ffmpeg 和 Mencoder都是命令行工具(当然你也可以下载源代码自己修改成com之类的),在C#只能用Process调用,前面我提过要获得输出信息(获取视 频相关信息、获取当前的转换进度、获取什么时候完成转换),必须设置process.StartInfo.UseShellExecute = false; process.StartInfo.CreateNoWindow = true;然后必须通过异步编程的方式获取Process.StandardOutput和Process.StandardError的值

收获园豆:10
邀月 | 园豆:25375 (高人七级) | 2010-08-16 19:55
哦! 下载了最新ffmpeg 注意了中文命名了: 可是就是不对: System.Diagnostics.Process p = new System.Diagnostics.Process(); p.StartInfo.FileName = "F:\\ffmpeg\\ffmpeg.exe"; p.StartInfo.Arguments = " -i F:\\1.avi -ab 56 -ar 22050 -b 500 -r 15 - s 400×300 F:\\2.flv"; p.StartInfo.WindowStyle=System.Diagnostics.ProcessWindowStyle.Normal; p.Start(); 这样也不行! 应该是Arguments 的问题吧。可是我就找不出来。。。。 F盘根本就不能出现2.flv
支持(0) 反对(0) winnerfat | 园豆:0 (初学一级) | 2010-08-16 20:39
我是在asp.net下做的/////////// 一样可以的把?
支持(0) 反对(0) winnerfat | 园豆:0 (初学一级) | 2010-08-16 20:54
0
收获园豆:10
Astar | 园豆:40805 (高人七级) | 2010-08-16 21:19
给两个文件夹设置everyone权限。
支持(0) 反对(0) Astar | 园豆:40805 (高人七级) | 2010-08-17 08:42
0

你是不是在 asp.net 中调用啊? 如果是这样,一定是权限问题。

eaglet | 园豆:17119 (专家六级) | 2010-08-17 07:43
我只是在vs2010里面调试。。也没有配IIS 那也需要权限吗?
支持(0) 反对(0) winnerfat | 园豆:0 (初学一级) | 2010-08-17 09:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册