准备拼接文件 里面放的是需要拼接视频文件的路径
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");
拼接好的视频
标签:ffmpeg,m3u8,C#,basedir,mp4,file,concat,string From: https://www.cnblogs.com/JohnnyLei/p/18147759