C#:使用ffmpeg将图片合并成视频

  最近遇到公司的一个项目,需要将多张图片合并成一个播放的视频,找了很多资料和尝试了工具,遇到很多的坑,这里记下来,希望大家也能顺利解决遇到的问题。

  合并视频,主要可以借用OpenCV 和 ffmpeg,这里是尝试用ffmpeg.exe的工具去实现图片文件合并成视频。

  输入存储视频文件的路径,通过ProcessStartInfo 调用ffmpeg.exe软件启动合并图片操作,并在startInfo.Arguments写入控制指令。

#region 图片转视频
public void ImageGetVideo()
{
string ffmpeg = string.Format("{0}ffmpeg.exe", AppDomain.CurrentDomain.BaseDirectory);
try
{
string videoFile = MP4Path.Text + @"test.mp4 "; //创建视频文件命
if (File.Exists(videoFile))
{
File.Delete(videoFile);
}

this.KillProcess("ffmpeg"); //注意,进程名字不带.exe之类后缀

ProcessStartInfo startInfo = new ProcessStartInfo(ffmpeg);
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
// -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg //这是把视频转图片的
//及其耗CUP的指定帧截取图片帧 string.Format(" -i \"{0}\" -y -f image2 -ss {1} -s \"{2}\" \"{3}\"", vedioPath, catchTime, saveImgSize, saveImgPath)
//string param = string.Format(" -f image2 -i " + txtPath.Text + @"\%d.jpg -vcodec libx264 -r 10 " + MP4Path.Text + @"\test.mp4 ");
string param = string.Format(" -f image2 -r (1/3) -i " + txtPath.Text + @"\%d.jpg -vf fps=12 " + MP4Path.Text + @"\test.mp4 ");
//param = param + string.Format(" ffplay -i " + MP4Path.Text + @"\test.mp4 -vf setpts=PTS/(1/16)");

startInfo.Arguments = param;
System.Diagnostics.Process.Start(startInfo).Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
return;
}
}
#endregion

指令注意:

" -f image2 -i " + (图片文件地址)+ @"\%d.jpg -vcodec libx264 -r 10 " + (视频文件地址)+ @"\test.mp4 "  ,最后面的是存放视频的文件名称,注意这里放的图片序号一定要是连续的(例:1.jpg,2.jpg,3.jpg....),不然合并不成功,这里设置的播放图片的时间间隔是3S,并且合并图片最好在第一张图片放一张黑色底图,第一张图片切到第二图片,没有时间间隔,容易一闪而过,放一张黑色底图,序号改成1.jpg,可以不影响后面图片的播放。

 

原文链接:https://www.cnblogs.com/mominghei/archive/2023/04/28/17362820.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#:使用ffmpeg将图片合并成视频 - Python技术站

(0)
上一篇 2023年4月30日
下一篇 2023年4月30日

相关文章

  • C# File.Move – 移动文件

    C#中的File.Move方法可以将文件或文件夹从一个位置移动到另一个位置。同时,它还可以更改文件或文件夹的名称。以下是File.Move方法的完整攻略。 方法声明 public static void Move(string sourceFileName, string destFileName); 或 public static void Move(st…

    C# 2023年4月19日
    00
  • C#温故而知新系列教程之闭包

    C#温故而知新系列教程之闭包 什么是闭包 闭包(Closure),是指一个函数(或者委托)及其相关信息的引用组合而成的实体。在C#中,闭包可以理解为一个函数以及该函数所引用的外部变量组合成的一个实体。 假设有一个函数AddValue(),可以接受一个整型参数,并返回一个函数,该返回的函数内部可以将接受的参数与之前的参数累加并返回累加的结果。使用闭包,可以将之…

    C# 2023年6月1日
    00
  • 详解C# 反射(Reflection)

    详解 C# 反射(Reflection) C# 反射(Reflection)是指在程序运行的时候动态的获得一个类的信息以及可以操作这个类、实例等相关信息的能力。反射提供了一种机制来检查程序集中的元数据,包括类型定义、字段、属性、方法等信息。在运行时,可以通过反射来创建对象、调用方法、获取或设置属性等。 反射的作用 可以查看类型、方法、构造函数、属性、字段、事…

    C# 2023年6月1日
    00
  • c#的dataset离线数据集示例

    下面是“C#的dataset离线数据集示例”的完整攻略: 什么是 dataset? dataset是C#语言中数据存储和管理的一种对象,它可以在离线状态下对数据进行操作,而不需要一直与数据库保持连接。使用dataset可以查询、修改、删除和插入数据等操作。dataset由多个DataTable组成,每个DataTable代表一个数据表格。 创建 datase…

    C# 2023年6月2日
    00
  • C#实现判断字符串中是否包含中文的方法

    下面是关于“C#实现判断字符串中是否包含中文的方法”的完整攻略: 方法一:使用正则表达式 正则表达式是一个强大的工具,可以用来匹配符合某种规则的文本。在C#中,可以使用正则表达式来判断字符串中是否包含中文。 下面是一个用正则表达式判断中文的示例代码: using System.Text.RegularExpressions; public bool Cont…

    C# 2023年6月8日
    00
  • .NET C#创建WebService服务简单实例

    .NET C#创建WebService服务简单实例 WebService是一种基于Web的分布式应用程序,它使用标准的Internet协议来通信。在.NET C#中,我们可以使用ASP.NET Web服务来创建WebService服务。本文将提供详细的“.NET C#创建WebService服务简单实例”的完整攻略,包括如何创建WebService服务、如何…

    C# 2023年5月15日
    00
  • asp.net(c#) RSS功能实现代码

    ASP.NET(C#)中实现RSS功能一般可分为以下步骤: 第一步:准备数据 RSS需要的数据格式一般是XML,所以我们需要准备好相应的XML数据。在ASP.NET中可以使用Linq to XML技术来生成XML,下面是一个示例代码: XElement rss = new XElement("rss", new XAttribute(&q…

    C# 2023年5月31日
    00
  • C#实现XML与实体类之间相互转换的方法(序列化与反序列化)

    首先我们需要明确两个概念:序列化和反序列化。序列化是将对象转换为XML或JSON格式的文本数据,而反序列化则是将XML或JSON格式的文本数据转换为对象。 在C#中,我们可以使用XmlSerializer类来实现XML和实体类之间的序列化和反序列化。以下是详细的步骤: 1. 定义实体类 我们先定义一个Person类来说明这个过程: public class …

    C# 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部