您好,登錄后才能下訂單哦!
今天小編給大家分享一下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; } List<VideoCut> list = new List<VideoCut>(); 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 + "】個文件..."); c=list[i]; file = FFMEPG.Cut(c.file, c.begin, c.end); if (file.Length > 0) { log("剪切成功,輸出文件:"+file); } else log("剪切失敗....."); } log(""); log(""); log("剪切完成......");
六,大致就這樣了,運行如下圖
ffmpeg命令要能夠調用哈,放到同目錄或都windows系統目錄都行。
以上就是“C#如何實現視頻的批量剪輯功能”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。