首页 > 其他分享 >ffmpeg合并视频

ffmpeg合并视频

时间:2023-05-10 19:56:11浏览次数:62  
标签:视频 ffmpeg processStartInfo 合并 mp4 file dir string

先下载个ffmpeg

命令行:

ffmpeg -f concat -i filelist.txt -c copy out\new.mp4

filelis.txt与ffmpeg.exe同一目录, 内容如下:

file 'F:\Download\【日剧_11集全】\1.EP01-1_Av438702220_P1_.mp4'
file 'F:\Download\【日剧_11集全】\2.EP01-2_Av438702220_P2_.mp4'
file 'F:\Download\【日剧_11集全】\3.EP01-3_Av438702220_P3_.mp4'
file 'F:\Download\【日剧_11集全】\4.EP01-4_Av438702220_P4_.mp4'
file 'F:\Download\【日剧_11集全】\5.EP01-5_Av438702220_P5_.mp4'
file 'F:\Download\【日剧_11集全】\6.EP01-6_Av438702220_P6_.mp4'

如果想创建的视频在out目录下, out目录要自己先创建, ffmpeg不能创建目录. 上面也可以用new.mp4, 拼合的新视频在当前目录.

filelist.txt中的文件名可以用相对路径,  名字或路径中不能包含,(), 即逗号,左括号, 右括号, 不然提示警告拼接不了.

ffmpeg最后输出的路径只能用相对路径, 已试过用绝对路径的, 执行不了.

 

使用C#代码调用ffmpeg, 例子:

/// <summary>
        /// 拼接视频
        /// </summary>
        /// <param name="files">有序的文件列表</param>
        /// <param name="destName">拼接后的名字如out\abc.mp4</param>
        private void ConcatVideo(List<string> files, string destName)
        {
            string dir = Path.GetDirectoryName(files[0]);
            if (!Directory.Exists(dir + "\\out"))
            {
                Directory.CreateDirectory(dir + "\\out");
            }
            if (!Directory.Exists(dir + "\\源"))
            {
                Directory.CreateDirectory(dir + "\\源");
            }
            try
            {
                StringBuilder sb = new StringBuilder();
                foreach (string file in files)
                {
                    sb.Append($"file '{Path.GetFileName(file)}'\r\n");
                }
                File.WriteAllText(dir + "\\filelist.txt", sb.ToString());
                string paras = $"-f concat -i filelist.txt -c copy {destName}";
                string destExe = dir + "\\ffmpeg.exe";
                if(!File.Exists(destExe))
                {
                    string exePath = AppDomain.CurrentDomain.BaseDirectory + "ffmpeg.exe";
                    File.Copy(exePath, destExe, true);
                }
              
                ProcessStartInfo processStartInfo = new ProcessStartInfo();
                processStartInfo.WorkingDirectory = dir;
                processStartInfo.FileName = destExe;
                processStartInfo.WindowStyle = ProcessWindowStyle.Normal;
                processStartInfo.Arguments = paras;
                processStartInfo.UseShellExecute = true;
                Process? p = Process.Start(processStartInfo);
                p?.WaitForExit();
                //处理完整的源文件切到新目录
                foreach(string file in files)
                {
                    FileInfo fileInfo= new FileInfo(file);
                    fileInfo.MoveTo(dir + "\\源\\" + Path.GetFileName(file), true);
                }
            }
            catch(Exception ex)
            {
                WriteLog(ex.Message);
            }
        }

  

标签:视频,ffmpeg,processStartInfo,合并,mp4,file,dir,string
From: https://www.cnblogs.com/barrysgy/p/17389160.html

相关文章

  • Basler相机视频录制
    【安装】先安装Basler_pylon_7.2.1.25747再安装补充包pylon_Supplementary_Package_for_MPEG-4_1.0.1.118可录制mp4格式。【设置】pylonViewer界面——窗口——录制设置录制间隔与播放速度需匹配,否则有慢放或快放效果:录制速度>播放速度,慢放,适合观察高速对象录制速度<播放速......
  • ffmpeg 硬件加速
    ffmpeg硬件加速硬件加速API在各系统和硬解环境的支持情况如下FFmpeg实现的API的情况如下......
  • 视频加字幕怎么制作?视频加字幕软件全分享!​
    视频加字幕怎么制作?视频加字幕是指在视频中添加文字说明或翻译的操作,以便于观众理解和沟通。通过视频加字幕,可以为听障人士、非母语使用者等人群提供更好的观看体验,并且方便用户在不方便听声音的场合下了解视频内容,很多小伙伴想给自己的视频加上一个字幕,却不知道该用什么软件进行,下......
  • MarkDown语法基础详解附带视频链接
    MarkDown语法基础大家如果喜欢的话就收藏或者分享给你的小伙伴把!以下总结的为常见语法,我使用的是Typora破解版,里面有快捷键,讲语法是为了让大家更好的理解大家也可以去看详细视频讲解基础篇视频讲解链接画图篇视频讲解链接标题标题使用方法:#+空格+标题(回车得到标题)标题分为......
  • WebRTC + JsSIP + freeSWITCH一对一视频聊天
    之前几篇文件介绍了freeSWITCH和WebRTC结合在一起需要的各种环境,现在到了最关键的一篇,使用JsSIP来创建一个DEMO。这次我们需要写点JS代码。准备JsSIP库文件可以从http://www.jssip.net/download/下载一个min版的js文件,我用的是3.0.13,文件名是jssip-3.0.13.m......
  • FreeSWITCH实现在视频通话中某一方视频翻转
    客户项目使用浏览器+webrtc+FreeSWITCH在各类国产化终端间(windows+kylin+android+emss等)实现音视频通信、状态呈现以及即时消息。本来实施挺顺利,但客户新引进了一批新FT终端,摄像头画面竟然向左翻转了90度,关键是,客户认为终端质量没有问题,让软件系统自行解决。翻遍了v4l2驱动配置和......
  • freeSWITCH 视频通话
    一,freeSWITCH安装  本实验基于CentOS6 源码编译安装FreeSWITCH,详细安装过程见下:http://990487026.blog.51cto.com/10133282/1921010   二,配置FreeSWITCH,加载H26x模块1,FreeSWITCH先处于关闭状态.2,修改配置文件:[root@CentOS ~]# vim ~/freeswitch/etc/fr......
  • STATA 按STKCD YEAR 合并所有的kamd
    uselinshi0510,clearbysstkcdyear:genbz=_nlocalk=_Nlocalaa""localbb""localdd""genbzz=""formatbzz%200sforvaluesi=1/`k'{localaa=stkcd[`i']localbb=year[`i']ifbz[`i&......
  • 56. 合并区间
    以数组intervals表示若干个区间的集合,其中单个区间为intervals[i]=[starti,endi]。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。输入:intervals=[[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间[1,3]和......
  • C# .Net Core 合并PDF文件
    使用PdfSharpCorenuget包代码实现usingMicrosoft.AspNetCore.Razor.TagHelpers;usingPdfSharpCore.Pdf;usingPdfSharpCore.Pdf.IO;usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespace......