php个人网站论文,服务推广网站,最好的品牌设计公司,做的网站适应屏幕大小篇首#xff0c;完全没有技术含量的帖子#xff0c;高手略过#xff0c;只为十几年后重新捡起的我爱好玩玩。。。
起因#xff0c;一个朋友说他下载了很多短视频#xff0c;但只需要要其中的一小截#xff0c;去头掐尾#xff0c;在软件里搞来搞去太麻烦#xff0c;让…篇首完全没有技术含量的帖子高手略过只为十几年后重新捡起的我爱好玩玩。。。
起因一个朋友说他下载了很多短视频但只需要要其中的一小截去头掐尾在软件里搞来搞去太麻烦让我帮忙我这个编程二吊子爽快的接了下来。
还是一二三理清思路方案就用ffmpeg命令行剪辑生成新视频c#做个集成一键处理。。
一采用预置数据data.txt记录【视频文件名起点时间终止时间】此为单独一行多个文件就多行如下图 二一个videocut类
class VideoCut{public string file;public string begin;public string end;public VideoCut(string f,string b,string w){file f;begin b;end w; }}
三解析数据文件data.txt生成videocut的列表 count 0;listbox.Items.Clear();logno(开始解析数据文件....);if (!System.IO.File.Exists(data.txt)){log(找不到数据文件data.txt);return;}ListVideoCut list new ListVideoCut();string[] ary;TimeSpan begin;TimeSpan end;int i 0;foreach (string line in System.IO.File.ReadLines(data.txt)){ary line.Trim().Split(,);log(第 i 行 line.Trim());if(ary.Length!3){log(数据line.Trim(),格式不对);continue;}if (!System.IO.File.Exists(ary[0])){log(文件ary[0].Trim(),不存在);continue;}if (!TimeSpan.TryParse(ary[1].Trim(), out begin)){log(起点时间 ary[1].Trim() ,格式不对);continue;}if (!TimeSpan.TryParse(ary[2].Trim(), out end)){log(截止时间 ary[2].Trim() ,格式不对);continue;}if (end begin){log(截止时间应该大于起点时间);continue;}list.Add(new VideoCut(ary[0], ary[1], (end-begin).ToString()));}logno(解析数据文件完毕成功解析文件list.Count个...);if (list.Count 1){log(没有数据退出);} 四一个ffmpeg的剪辑类
class FFMEPG{//视频切割public static string Cut(string OriginFile/*视频源文件*/, string startTime/*开始时间*/, string endTime/*结束时间*/){string DstFile OriginFile.Replace(., a.);string strCmd -ss startTime -i OriginFile -to endTime -vcodec copy -acodec copy DstFile -y ;if (System.IO.File.Exists(DstFile))System.IO.File.Delete(DstFile);System.Diagnostics.Process p new System.Diagnostics.Process();p.StartInfo.FileName ffmpeg.exe;//要执行的程序名称p.StartInfo.Arguments strCmd;p.StartInfo.UseShellExecute false;p.StartInfo.RedirectStandardInput false;//可能接受来自调用程序的输入信息p.StartInfo.RedirectStandardOutput false;//由调用程序获取输出信息p.StartInfo.RedirectStandardError false;//重定向标准错误输出p.StartInfo.CreateNoWindow false;//不显示程序窗口p.Start();//启动程序p.WaitForExit();//等待程序执行完退出进程if (System.IO.File.Exists(DstFile)){return DstFile;}return ;}}
五循环调用videocut列表
VideoCut c;string file;for (i 0; i list.Count; i){logno(开始剪切第【 i 】个文件...);clist[i];file FFMEPG.Cut(c.file, c.begin, c.end);if (file.Length 0){log(剪切成功输出文件file);}else log(剪切失败.....);}log();log();log(剪切完成......);
六大致就这样了运行如下图 ffmpeg命令要能够调用哈放到同目录或都windows系统目录都行。。。
源代码已经上传可以下载到。。。