TS流批量下载工具

TS流批量下载工具工具目录下有3个文件ffmpeg.exe:主要用来处理TS文件转为PM4文件用到,可以自行到相关网站下载http://ffmpeg.org/OnlineFilm.exe 主要执行程序FilesDownLoad.dll下载模块 新建   新建TS文件的索引文件,*.M3u8,怎么获取,参照“Ts文件说明”。M3U8文件如果是本地的文件,需要填写通用地址。…

大家好,又见面了,我是你们的朋友全栈君。

工具目录下有3个文件

ffmpeg.exe: 主要用来 处理TS文件转为PM4文件用到,可以自行到相关网站下载 http://ffmpeg.org/

OnlineFilm.exe  主要执行程序
FilesDownLoad.dll 下载模块
 

TS流批量下载工具
新建
     新建 TS文件的索引文件,*.M3u8,怎么获取,参照“Ts文件说明”。

M3U8文件如果是本地的文件,需要填写 通用地址。

修改

删除

    直接删除这条记录,可以多选删除

统计
  
   统计已经下载完成的记录数

下载

   弹出下载的窗口,进行下载。每个资源文件都需要打开该界面进行下载。

TS流批量下载工具
打开文件夹

  打开该下载的文件夹

读取M3u8

 批量读取文件  

读取的批量文件为 DetailList.txt,并放置到 和工具一个目录下。
格式为:名称|地址(URL),一行一条记录。

美女 | https://www.abc/xxx/index.m3u8
直播 | https://www.abc/yyy/index.m3u8

合并TS文件

  如果多个TS文件,没有自动合并,可以使用该功能进行合并操作

 

  TS文件转换为MP4文件,需要用到 ffmpeg.exe

 

 

1、TS 文件合并

        private void Merge()
        {
            CmdHelper c = new CmdHelper();

            //>copy/b f:\ts\11\*.ts f:\ts\11\temp\new.ts


            string newpath = _entity.RootFilePath + "\\" + _entity.FileName + "\\";
            string newpath1 = _entity.RootFilePath + "\\" + _entity.FileName + "\\tmp\\";

            if (!Directory.Exists(newpath1)) //判断是否存在
            {
                Directory.CreateDirectory(newpath1); //创建新路径  
            }

            if (File.Exists(newpath1 + _entity.FileName + ".ts"))
            {
                File.Delete(newpath1 + _entity.FileName + ".ts");
            }


            string cmd = @"copy/b " + newpath + "*.ts " + newpath1 + _entity.FileName + ".ts";

            string s = c.RunCmd(cmd);

            //  MessageBox.Show("合并完成");
        }

        /// <summary>
        /// 执行CMD语句
        /// </summary>
        /// <param name="cmd">要执行的CMD命令</param>
        public string RunCmd(string cmd)
        {
            proc.StartInfo.CreateNoWindow = true;
            proc.StartInfo.FileName = "cmd.exe";
            proc.StartInfo.UseShellExecute = false;
            proc.StartInfo.RedirectStandardError = true;
            proc.StartInfo.RedirectStandardInput = true;
            proc.StartInfo.RedirectStandardOutput = true;
            proc.Start();
            proc.StandardInput.WriteLine(cmd);
            proc.StandardInput.WriteLine("exit");
            string outStr = proc.StandardOutput.ReadToEnd();
            proc.Close();
            return outStr;
        }

2、TS转MP4

        string fullFileName = System.IO.Path.Combine(Application.StartupPath, "ffmpeg.exe");  

        /// <summary>
        /// TS -->Mp4
        /// </summary>
        private void TsToMP4()
        {
            // ffmpeg -y -i F:\Ts\11\tmp\11.ts -c:v libx264 -c:a copy -bsf:a aac_adtstoasc F:\Ts\11\tmp\11.mp4  
            //ffmpeg -y -i in.ts -c:v libx264 -c:a copy -bsf:a aac_adtstoasc output.mp4
            //ffmpeg -y -i F:\Ts\11\tmp\11.ts -c:v libx264 -c:a copy -bsf:a aac_adtstoasc F:\Ts\11\tmp\11.mp4        

            if (!File.Exists(_path))
            {
                return;
            }  
            
            string Mp4File = System.IO.Path.GetDirectoryName(_path) + "\\" +System.IO.Path.GetFileNameWithoutExtension(_path) + ".mp4";    

            string para = string.Format("-y -i {0} -c:v libx264 -c:a copy -bsf:a aac_adtstoasc {1}", _path, Mp4File);

            CmdHelper.RunMyProcess(para, fullFileName);      
        }


        /// <summary>
        /// 
        /// </summary>
        /// <param name="Parameters">执行参数</param>
        /// <param name="FFmpegPath">ffmpeg.exe 路径</param>
        public static void RunMyProcess(string Parameters, string FFmpegPath)
        {
            var p = new Process();
            p.StartInfo.FileName = FFmpegPath;
            p.StartInfo.Arguments = Parameters;
            //是否使用操作系统shell启动
            p.StartInfo.UseShellExecute = false;
            //不显示程序窗口
            p.StartInfo.CreateNoWindow = true;
            p.Start();  
            p.WaitForExit();
            p.Close();
        }

 

 

工具下载地址:https://download.csdn.net/download/yunfan555/10812630

 

 

欢迎交流。

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/161203.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • idea快捷键整理代码_idea中快捷键

    idea快捷键整理代码_idea中快捷键IDEA常用快捷键

    2022年10月12日
    4
  • 2013年上海交大学生论文致谢[通俗易懂]

    2013年上海交大学生论文致谢[通俗易懂]公元两千零七年,岁次丁亥,仲夏之月,联科论文乃告杀青。辞穷理微,未敢称凌云之作,镂心鸟迹,得不效相如之叹?于是凭窗抱膝,寄情遐思。忆吾弱冠之龄入交通大学,意气方遒。尔来春秋有八,于今毕业,年齿已趋而立。户牅之外,万物滋荣,景致阙如昨日,堂室之内,联科已有苍颜白发矣。文凭两纸霜鬓两行,黄粱一枕功名一场,此皆寻常人生,乏善可陈。然联科身发受之父母,道德受之母校,学问受之师长,育教之恩,虽陨首结草不能报

    2022年5月15日
    31
  • imfinfo怎么用_matlablimit函数

    imfinfo怎么用_matlablimit函数imfinifo获取图像的相关信息!例如:>>Ipath=’F:\actionrecognition\code2\DB\JPEGImages\action0002.jpg’;>>info=imfinfo(Ipath)info=       Filename:’F:\actionrecognition\code2\DB\JPEGImages\action

    2022年10月5日
    3
  • 数组和链表的区别,各有何优缺点

    数组和链表的区别,各有何优缺点链表与数组的区别(1)数组的元素个数是固定的,而组成链表的结点个数可按需要增减;(2)数组元素的存诸单元在数组定义时分配,链表结点的存储单元在程序执行时动态向系统申请;(3)数组中的元素顺序关系由元素在数组中的位置(即下标)确定,链表中的结点顺序关系由结点所包含的指针来体现。(4)对于不是固定长度的列表,用可能最大长度的数组来描述,会浪费许多内存空间。(5)对于元素的插人、删除操作非常频繁的列表处理场合,用数组表示是不适宜的。若用链表实现,会使程序结构清晰,处理的方法也较为简便。数组的优点随机

    2022年6月17日
    90
  • java经典实例 源代码_100个Java经典编程实例源代码JAVA源码下载

    java经典实例 源代码_100个Java经典编程实例源代码JAVA源码下载100个Java经典编程实例源代码(2folders,2files,1.38KB,25.13MBintotal.)java运用编程100例(二)例57-100(45folders,2files,1.38KB,17.04MBintotal.)实例100(1folders,4files,1.64KB,1.31MB…

    2022年7月7日
    24
  • 手把手教你设置 IntelliJ IDEA 的彩色代码主题「建议收藏」

    手把手教你设置 IntelliJ IDEA 的彩色代码主题「建议收藏」温馨提示:本教程的GitHub地址为「intellij-idea-tutorial」,欢迎感兴趣的童鞋Star、Fork,纠错。首先,给出一系列IntelliJIDEA代码的彩色主题,供大家选择:VibrantUnknown(Darcula)FadeCommentsNicePythonSolarizedHavenjark

    2022年5月25日
    265

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号