首页 > 编程语言 >C#:使用ffmpeg将图片合并成视频

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

时间:2023-04-28 17:44:44浏览次数:23  
标签:视频 ffmpeg C# Text jpg string 图片

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

  合并视频,主要可以借用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,可以不影响后面图片的播放。

 

标签:视频,ffmpeg,C#,Text,jpg,string,图片
From: https://www.cnblogs.com/mominghei/p/17362820.html

相关文章

  • 小鹅通视频课件课程下载工具,如何在电脑端下载小鹅通频课件PDF,PPT到本地
    一.安装小鹅通下载器1.获取学无止下载器https://www.xuewuzhi.cn/xiaoetech_downloader2.下载安装后,然后点击桌面快捷方式运行即可。注意:杀毒软件可能会阻止外部exe文件运行,并将其当做成病毒,直接添加信任即可,本软件绝对没有木马病毒。二.使用说明1.学无止下载器介绍学无......
  • vector,list,deque,set,map of STL
    List封装了链表,Vector封装了数组,list和vector得最主要的区别在于vector使用连续内存存储的,他支持[]运算符,而list是以链表形式实现的,不支持[]。Vector对于随机访问的速度很快,但是对于插入尤其是在头部插入元素速度很慢,在尾部插入速度很快。List对于随机访问速度慢得多,因为可能要......
  • 《Socket I/O模型全接触》
    本文简单介绍了当前Windows支持的各种SocketI/O模型,如果你发现其中存在什么错误请务必赐教。一:select模型二:WSAAsyncSelect模型三:WSAEventSelect模型四:OverlappedI/O事件通知模型五:OverlappedI/O完成例程模型六:IOCP模型老陈有一个在外地工作的女儿,不能经常回来,老陈和......
  • VC中实现哈希Hash算法
       Hash函数我们可以自己用C来编写,但是如果在VC中就不必了,因为在VC中有实现hash算法的函数可以调用,就是CryptAcquireContext函数,这个函数的定义在wincrypt.h头文件中。下面是我在MFC中实现的,因为想要结果输出到messagebox中,所以就在视类里定义和实现了GetHash函数来计算哈希值......
  • IOCP
    本文主要探讨一下windows平台上的完成端口开发及其与之相关的几个重要的技术概念,这些概念都是与基于IOCP的开发密切相关的,对开发人员来讲,又不得不给予足够重视的几个概念:1)基于IOCP实现的服务吞吐量2)IOCP模式下的线程切换3)基于IOCP实现的消息的乱序问题。 一、IOCP简介 ......
  • VC下Base64编码及解码程序源代码
    //Base64.h:interfacefortheCBase64class.////#if!defined(AFX_BASE64_H__8D85F486_CD10_4A0A_A689_2299C9DE52CB__INCLUDED_)#defineAFX_BASE64_H__8D85F486_CD10_4A0A_A689_2299C9DE52CB__INCLUDED_#if_MSC_VER>1000#pragmaonce#endif//_MSC_V......
  • VS2010创建Webservice程序
    VisualStudio2010中已经找不到直接创建WebService的模板方式了,但下面的方法可心实现:  在VisualStudio2010的新建Web应用程序或者Web网站窗口中,如果你选择.NET4.0,会发现缺少了ASP.NETWebServices模板。你可能会怀疑VS2010是不是不支持ASP.NETWebServices......
  • CDialogBar窗口的悬浮设置
    (1)创建Dialog后将其设置为ToolWindow,其它和CDialogBar要求一样(2)在OnCreat里添加代码       if(!m_Bar.Create(this,IDD_HISTOGRAM,CBRS_LEFT,ID_VIEW_HISTOGRAM)){TRACE0("Failedtocreatedialogbar/n");return-1;......
  • Java 项目中一种简单的动态修改配置即时生效的方式 WatchService
    这种方式仅适合于比较小的项目,例如只有一两台服务器,而且配置文件是可以直接修改的。例如Springmvc以war包的形式部署,可以直接修改resources中的配置文件。如果是Springboot项目,还想用这种方式的话,就要引用一个外部可以编辑的文件,比如一个固定的目录,因为springboot大多......
  • Java多线程之---用 CountDownLatch 说明 AQS 的实现原理
    本文基于jdk1.8。CountDownLatch的使用前面的文章中说到了volatile以及用volatile来实现自旋锁,例如java.util.concurrent.atomic包下的工具类。但是volatile的使用场景毕竟有限,很多的情况下并不是适用,这个时候就需要synchronized或者各种锁实现了。今天就来说一下几......