使用ffmpeg命令把单张或多张图片生成固定时长的视频
1,官网下载 FFmpeg.exe
参见:https://blog.csdn.net/m0_46278037/article/details/113790540
2,FFmpegHelper代码如下
1 public class FFmpegHelper 2 { 3 public void ConvertVideo() 4 { 5 6 string inputDirectory = Path.Combine(Application.StartupPath, "images"); 7 string outputFile = Path.Combine(Application.StartupPath, @"out\out.mp4"); 8 9 string ffmpegtool = Path.Combine(Application.StartupPath, "ffmpeg.exe"); 10 int imageTotal = Directory.GetFiles(inputDirectory).Length; 11 int totalSecond = 12;// 总时长:12秒 12 double framerate = Math.Round(imageTotal * 1.0d / totalSecond, 2); 13 List<string> list = new List<string>(); 14 list.Add($"-framerate {framerate}");// 输入图像序列的帧率,25帧 15 list.Add("-f image2"); // 输入流格式 16 list.Add("-loop 1"); // 输入流循环次数,仅对图片有效,0表示无效循环 17 list.Add($"-i {inputDirectory}\\image%03d.jpg");// 03d%表示占位数 image001.jpg,image002.jpg 18 19 list.Add("-r 29.97"); // 输出帧率,只能设定为为 29.97或15,否则,非标准帧率会导致音画不同步 20 list.Add("-c:v libx264"); //用H.264编码器 21 list.Add("-pix_fmt yuv420p");// 输出的像素格式,这是一种广泛兼容性的格式
list.Add("-s 800x800"); // 指定分辨率 ;宽度与高度必须为偶数,否则会报错 22 list.Add($"-t {totalSecond}");// 视频时长 23 list.Add("-y");// 输出新文件,覆盖原有文件 24 25 list.Add(outputFile); 26 27 string cmd = string.Join(" ", list); 28 Process p = new Process();//建立外部调用线程 29 p.StartInfo.FileName = ffmpegtool;//要调用外部程序的绝对路径 30 p.StartInfo.Arguments = cmd; 31 p.StartInfo.UseShellExecute = false;//不使用操作系统外壳程序启动线程(一定为FALSE,详细的请看MSDN) 32 p.StartInfo.RedirectStandardError = true;//把外部程序错误输出写到StandardError流中(这个一定要注意,FFMPEG的所有输出信息,都为错误输出流,用StandardOutput是捕获不到任何消息的...这是我耗费了2个多月得出来的经验...mencoder就是用standardOutput来捕获的) 33 p.StartInfo.CreateNoWindow = false;//不创建进程窗口 34 //p.ErrorDataReceived += new DataReceivedEventHandler(Output);//外部程序(这里是FFMPEG)输出流时候产生的事件,这里是把流的处理过程转移到下面的方法中,详细请查阅MSDN 35 p.Start();//启动线程 36 p.BeginErrorReadLine();//开始异步读取 37 p.WaitForExit();//阻塞等待进程结束 38 p.Close();//关闭进程 39 p.Dispose();//释放资源 40 } 41 private void Output(object sendProcess, DataReceivedEventArgs output) 42 { 43 if (!String.IsNullOrEmpty(output.Data)) 44 { 45 46 } 47 } 48 }
参考资料:https://blog.csdn.net/sitetesty/article/details/123477473