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日

相关文章

  • ASP.NET 跨页面传值方法

    ASP.NET 跨页面传值通常有以下几种方式: 1. QueryString传值 QueryString 是一种将数据以键值对的方式传递到下一个页面的方式。我们通常将值附加到页面 URL 的末尾,并将它们作为该页的参数传递。例如,我们有两个页面 Page1.aspx 和 Page2.aspx,我们可以通过向 Page2.aspx 的 URL 添加参数,来将 …

    C# 2023年6月3日
    00
  • 你应该知道的.NET错误与异常处理机制

    你应该知道的.NET错误与异常处理机制 什么是异常? 在程序运行过程中,如果出现了不可预见的错误,我们把这种错误称之为异常(Exception)。常见的异常有空引用异常(NullReferenceException)、越界异常(IndexOutOfRangeException)等等。 .NET异常处理机制 .NET框架提供了一套完备的异常处理机制,可以帮助程…

    C# 2023年5月14日
    00
  • C#学习教程之Socket的简单使用

    C#学习教程之Socket的简单使用 什么是Socket? Socket(套接字)是支持TCP/IP协议的网络通信方式,它是一种用于网络通信的编程接口或应用程序编程接口(API),使得两个进程之间可以通过网络进行数据交互。在 C# 中,可以使用 System.Net.Sockets 命名空间中的类来实现 Socket 的编程。 如何实现 Socket 编程?…

    C# 2023年6月6日
    00
  • C# Linq的OrderByDescending()方法 – 根据指定的键按降序对序列的元素进行排序

    当使用C#Linq时,我们常常需要在对数据进行排序时使用OrderByDescending()方法。这个方法可以根据指定的条件对数据进行降序排序。 下面是使用OrderByDescending()方法的完整攻略: 格式 var result = collection.OrderByDescending(item => item.Property); 其…

    C# 2023年4月19日
    00
  • C# httpwebrequest访问HTTPS错误处理方法

    下面是关于C# httpwebrequest访问HTTPS错误处理方法的完整攻略。 问题描述 当使用C#中的httpwebrequest请求HTTPS的时候,可能会遇到一些安全策略上的限制,导致请求失败或者返回错误信息。例如,常见的错误信息“Could not establish trust relationship for the SSL/TLS secu…

    C# 2023年5月14日
    00
  • C# Stream.Seek – 在流中定位

    Stream.Seek 方法用于在流中寻找具有给定偏移量的位置,并将流的读/写指针移动到该位置。Seek 方法可用于在文件中进行定位,以便读取或写入指定位置的数据。 使用方法 方法签名 public virtual long Seek(long offset, SeekOrigin origin); 参数含义 offset:偏移量。它表示要在流内移动的字节数…

    C# 2023年4月19日
    00
  • ASP.NET MVC解决上传图片脏数据的方法

    当用户上传图片时,有时候会出现脏数据的情况,即图片数据被篡改或损坏。本文将介绍如何在ASP.NET MVC中解决上传图片脏数据的问题。 以下是解决上传图片脏数据的方法: 在Model中定义一个byte[]类型的属性来存储图片数据。在Models文件夹中,创建一个名为MyModel的类,然后添加以下代码: public class MyModel { publ…

    C# 2023年5月12日
    00
  • C#/VB.NET 自定义PPT动画路径的步骤

    C#/VB.NET 可以通过程序动态生成 PowerPoint(PPT)文档,并自定义 PPT 动画路径。下面是具体的步骤: 1. 创建 PowerPoint 应用程序对象 首先需要创建一个 PowerPoint 应用程序对象,可以通过调用 COM 互操作库中的 PowerPoint.Application 类来完成: using PowerPoint = …

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