準備拼接檔案 裡面放的是需要拼接影片檔案的路徑
concat_list.txt
準備程式碼
private void CombineFile(string filesDir, string targetmp4fileName) { string basedir = AppDomain.CurrentDomain.BaseDirectory; // ffmpeg的路徑 string ffmpegPath = @$"{basedir}ffmpeg\bin\ffmpeg.exe"; // 待合併的MP4檔案列表,使用concat協議的檔名 string concatListFilePath = @$"{basedir}concat_list.txt"; // 輸出的MP4檔案 string outputMp4FilePath = @$"{basedir}{targetmp4fileName}"; string outputcommandFilePath = @$"{basedir}command.txt"; var files = Directory.GetFiles(filesDir, "*.ts"); files = files.OrderBy(f => f).ToArray(); // 寫入concat協議檔案列表 using (System.IO.StreamWriter file = new System.IO.StreamWriter(concatListFilePath)) { foreach (var item in files) { file.WriteLine(@$"file '{item}'"); } // 繼續新增更多的videoX.mp4 } // 構造FFmpeg命令 string ffmpegCommand = $"-y -f concat -safe 0 -i {concatListFilePath} -c copy -map 0 -f mp4 {outputMp4FilePath} "; // 寫入ffmpegCommand using (System.IO.StreamWriter file = new System.IO.StreamWriter(outputcommandFilePath)) { file.WriteLine(@$" {ffmpegCommand} "); // 繼續新增更多的videoX.mp4 } // 使用Process類執行ffmpeg命令 ProcessStartInfo startInfo = new ProcessStartInfo { FileName = ffmpegPath, Arguments = ffmpegCommand, UseShellExecute = false, RedirectStandardOutput = true, RedirectStandardError = true, CreateNoWindow = true }; using (Process process = new Process { StartInfo = startInfo }) { try { process.Start(); } catch (Exception e) { Debug.WriteLine($"An error occurred: {e.Message}"); } } }
準備ffmpeg
使用
string localDir = $"{AppDomain.CurrentDomain.BaseDirectory}testvideo\\"; CombineFile(localDir, "output.mp4");
拼接好的影片