ffmpeg.exe是大名鼎鼎的视频处理软件,以命令行参数形式运行。网上也有很多关于ffmpeg的资料介绍。但是在用C#做实际开发时,却遇到了几个问题及注意事项,比如如何无损处理视频?如何在转换格式的同时添加水印,以提升处理效率?,ffmpeg的版本应该选择什么版本?。今天史林峰 ...
ffmpeg.exe是大名鼎鼎的视频处理软件,以命令行参数形式运行。网上也有很多关于ffmpeg的资料介绍。但是在用C#做实际开发时,却遇到了几个问题及注意事项,比如如何无损处理视频?如何在转换格式的同时添加水印,以提升处理效率?,ffmpeg的版本应该选择什么版本?。今天史林峰将用实战的方式来探索C#操作ffmpeg的奥秘。
关于ffmpeg的使用及其参数命令,这里就不做过多介绍了。主要以项目实战中为主。
因工作需要,笔者手头有近300部短视频需要处理,在网上找了不少工具,虽然能用,但是用起来却有一种Hold不住的感觉。要么是处理后有软件水印或片花,要么是不能直接批量一次性处理完,视频要一个一个地去设置。
这里主要需求是给现有的视频做格式转换,如果视频格式已经满足要求,就直接在指定位置加水印(png图片),在处理完之后,为了解决磁盘空间,在视频处理完成之后要删除原视频。笔者对C#语言是最熟知的,因此选用C# Winform做一个简易的视频批处理软件。
先上一张完工的项目截图:
在指定目录中读取视频,然后一件处理即可(中间的截取秒数的参数,属于视频剪切,暂时没有这块功能)
现有的视频均为flv格式的,通过C#调用ffmpeg,转换为mp4格式,并添加水印
C#调用ffmpeg的方法封装如下:
1 /// <summary> 2 /// 视频处理器ffmpeg.exe的位置 3 /// </summary> 4 public get='_blank'>string FFmpegPath { get; set; } 5 6 /// <summary> 7 /// 调用ffmpeg.exe 执行命令 8 /// </summary> 9 /// <param name="Parameters">命令参数</param>10 /// <returns>返回执行结果</returns>11 private string RunProcess(string Parameters)12 {13 //创建一个ProcessStartInfo对象 并设置相关属性14 var oInfo = new ProcessStartInfo(FFmpegPath, Parameters);15 oInfo.UseShellExecute = false;16 oInfo.CreateNoWindow = true;17 oInfo.RedirectStandardOutput = true;18 oInfo.RedirectStandardError = true;19 oInfo.RedirectStandardInput = true;20 21 //创建一个字符串和StreamReader 用来获取处理结果22 string output = null;23 StreamReader srOutput = null;24 25 try26 {27 //调用ffmpeg开始处理命令28 var proc = Process.Start(oInfo);29 30 proc.WaitForExit();31 32 33 //获取输出流34 srOutput = proc.StandardError;35 36 //转换成string37 output = srOutput.ReadToEnd();38 39 //关闭处理程序40 proc.Close();41 }42 catch (Exception)43 {44 output = string.Empty;45 }46 finally47 {48 //释放资源49 if (srOutput != null)50 {51 srOutput.Close();52 srOutput.Dispose();53 }54 }55 return output;56 }
原标题:史林枫:C#.NET利用ffmpeg操作视频实战(格式转换,加水印 一步到位)
关键词:.NET
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。