完整版ffmpeg使用情况


 protected void Page_Load(object sender, EventArgs e)
        {
            string filePath = @"D:/Prjects/MT147/example/01/";
            //将是视频转为SWF格式
            //ffmpeg bin目录 @"D:/tools/ffmpeg/bin/";
            string ffmpegBinPath = "D:/tools/ffmpeg/bin/";
            //需要转化的视频目录
            //string convertDirPath = Server.MapPath("/resource/example");

            //开始转化
            AllVideoConvertToSWF(filePath, ffmpegBinPath);

        }

 #region 视频转swf

        /// <summary>
        /// 将视频转为SWF格式
        /// </summary>
        /// <param name="ffmpegBinPath">ffmpeg 工具bin 目录</param>
        /// <param name="videoSourceFileName">视频完全路径</param>
        /// <param name="targetSwfFileName">转为SWF文件完全路径</param>
        /// <returns></returns>
        private bool VideoConvertToSWF(string ffmpegBinPath, string videoSourceFileName, string targetSwfFileName)
        {

            try
            {
                Process process = new Process();
                process.StartInfo.FileName = "cmd.exe";//确定程序名 

                //"cd C:\Users\Administrator\"
                string startCommandContent = @"cd C:\Users\Administrator\";

                string sCommand = startCommandContent;

                process.StartInfo.Arguments = sCommand;//确定程式命令行
                process.StartInfo.UseShellExecute = false;//Shell的使用
                process.StartInfo.RedirectStandardInput = true;//重定向输入
                process.StartInfo.RedirectStandardOutput = true;//重定向输出
                process.StartInfo.RedirectStandardError = true;//重定向输出错误
                process.StartInfo.CreateNoWindow = true;//设置置不显示示窗口
                process.Start();//00  

                //跳到C盘 c:
                process.StandardInput.WriteLine("c:");

                // cd C:\Users\Administrator\
                process.StandardInput.WriteLine(sCommand);//也可以用这种方式输入入要行的命令 

                string cdName = ffmpegBinPath.Substring(0, 1);

                //跳到ffmpeg bin目录对应的磁盘中 如: d:
                process.StandardInput.WriteLine(cdName + ":");

                //"cd C:\Users\Administrator\Desktop\ffmpeg\bin\"
                string commandCDFfmpegBin = @"cd {0}";

                commandCDFfmpegBin = string.Format(commandCDFfmpegBin, @ffmpegBinPath);

                process.StandardInput.WriteLine(@commandCDFfmpegBin);

                //如果码特率太多转化出错
                //@"ffmpeg -i C:\Users\Administrator\Desktop\ffmpeg\test.avi -to 00:30 c:\ttt.avi";

                //规定一定的码特率
                //ffmpeg -i C:\Users\Administrator\Desktop\ffmpeg\test.avi -to 00:30 -ar 22050 -y c:\ccc.avi

                string commandVideoContent = @"ffmpeg -i {0} -to 00:30 -ar 22050 -y {1}";

                commandVideoContent = string.Format(commandVideoContent, @videoSourceFileName, @targetSwfFileName);

                process.StandardInput.WriteLine(@commandVideoContent);

                process.StandardInput.WriteLine("exit");//要得加上Exit要不然下一行程式  

                //string result = process.StandardOutput.ReadToEnd(); //输出出流取得命令行结果

                //Response.Write(result);

                return true;

            }
            catch (Exception ex)
            {
                Response.Write(@videoSourceFileName + "转为WSF文件失败<br />");
                Response.Write(ex.Message + "<br />");

                return false;

            }

        }

        #endregion

        #region 批量转换函数

        /// <summary>
        /// 列出指定目录下及所其有子目录及子目录里更深层目录里的文件中的视频文件进行转化
        /// </summary>
        /// <param name="convertDirPath">需要转化的视频目录路径</param>
        /// <param name="ffmpegBinPath">转化工具ffmpeg bin目录路径</param>
        public void AllVideoConvertToSWF(string convertDirPath, string ffmpegBinPath)
        {

            DirectoryInfo dir = new DirectoryInfo(convertDirPath);

            //.flv,.wav,.swf,.avi,.mp3,.mp4,.rm,.rmvb,.mpg,.wmv,.3gp,.amv,.mov
            string exts = ".flv,.wav,.swf,.avi,.mp3,.mp4,.rm,.rmvb,.mpg,.wmv,.3gp,.amv,.mov";

            //找到该目录下的文件
            FileInfo[] fi = dir.GetFiles();

            foreach (FileInfo f in fi)
            {

                string currentExtensionName = Path.GetExtension(f.FullName).ToLower();

                //处理原格式为swf文件和生成的swf文件
                if (currentExtensionName == ".swf")
                {
                    int exIndex = f.FullName.LastIndexOf(currentExtensionName);

                    string beforeFileName = f.FullName.Remove(exIndex);

                    string beforeExtensionName = Path.GetExtension(beforeFileName);

                    //当前文件已经生成swf文件,不给继续生成swf文件
                    if (!string.IsNullOrEmpty(beforeExtensionName) && exts.Contains(beforeExtensionName))
                    {
                        continue;
                    }
                }

                if (System.IO.File.Exists(f.FullName + ".swf"))
                {
                    continue;
                }

                string ext = Path.GetExtension(f.FullName).ToLower();

                if (exts.Contains(ext))
                {
                    try
                    {
                        bool isSuccess = VideoConvertToSWF(ffmpegBinPath, f.FullName, f.FullName + ".swf");
                        Response.Write("完整路径:" + f.FullName.ToString() + " 生成SWF文件路径:" + f.FullName + ".swf  生成状态:" + isSuccess.ToString() + "<br>");
                    }
                    catch (Exception ex)
                    {
                        Response.Write("完整路径:" + f.FullName.ToString() + " 生成错误:" + ex.Message + "<br>");
                    }

                }
            }

            //获取子目录
            DirectoryInfo[] subDir = dir.GetDirectories();

            foreach (var d in subDir)
            {
                AllVideoConvertToSWF(d.FullName, ffmpegBinPath);
            }
        }

        #endregion
时间: 2024-08-26 09:56:18

完整版ffmpeg使用情况的相关文章

rip路由协议 细节分析及实例配置【完整版】

rip路由协议 细节分析及实例配置[完整版] RIP呢,这是一个比较重要的知识点,所以它的知识覆盖面很广泛:但是呢,我将会对碰到的问题进行一些分析解刨(主要是为了帮助自己理清思维):也希望能够从中发现自己不足的问题,也希望能够找到一些比较冷僻的问题,这样子才会有意思多了.   先上图,这个就是我准备做实验的基本用图了.现在已经按照图上标注的IP将所有基本配置设置好了. 在这个实验中,大多数都是基于ripv1,只有在需要比较的时候才会把版本改成ripv2,然后判断完之后再切换为ripv1: 第一步

信号处理必读的文章(-)—傅里叶分析之掐死教程(完整版)_转载至知乎

傅里叶分析之掐死教程(完整版)更新于2014.06.06 http://zhuanlan.zhihu.com/p/19763358 作 者:韩 昊 知 乎:Heinrich 微 博:@花生油工人 知乎专栏:与时间无关的故事 谨以此文献给大连海事大学的吴楠老师,柳晓鸣老师,王新年老师以及张晶泊老师. 转载的同学请保留上面这句话,谢谢.如果还能保留文章来源就更感激不尽了. ——更新于2014.6.6,想直接看更新的同学可以直接跳到第四章———— 我保证这篇文章和你以前看过的所有文章都不同,这是12年

CSS3弹性盒模型flexbox完整版教程

文章目录 基础知识 属性介绍 display: flex | inline-flex; (适用于父类容器元素上) 请注意: flex-direction (适用于父类容器的元素上) flex-wrap (适用于父类容器上) flex-flow (适用于父类容器上) justify-content (适用于父类容器上) align-items (适用于父类容器上) align-content (适用于父类容器上) order (适用于弹性盒模型容器子元素) flex-grow (适用于弹性盒模型容

计算机组成原理_第四版课后习题答案(完整版)

计算机组成原理_第四版课后习题答案(完整版) ?第一章 1.?比较数字计算机和模拟计算机的特点. 解:模拟计算机的特点:数值由连续量来表示,运算过程是连续的: 数字计算机的特点:数值由数字量(离散量)来表示,运算按位进行. 两者主要区别见P1?表1.1. 2.?数字计算机如何分类?分类的依据是什么? 解:分类: 数字计算机分为专用计算机和通用计算机.通用计算机又分为巨型机.大型机. 中型机.小型机.微型机和单片机六类. 分类依据:专用和通用是根据计算机的效率.速度.价格.运行的经济性和适应性来划

Centos Bind配置完整版

首先要成功安装Centos操作系统,最新版本是Centos 6.4版本,最小化安装. [root@localhost named]# ifconfig -a eth1      Link encap:Ethernet  HWaddr 00:15:5D:01:69:2C inet addr:192.168.1.251  Bcast:192.168.1.255  Mask:255.255.255.0 inet6 addr: f180::225:5cff:fe01:691c/64 Scope:Link

中国移动短信网关错误代码汇总(完整版)

中国移动短信网关错误代码汇总(完整版) 发短信的时候,平台里经常会提示一些不常见的错误网关代码,这里先移动短信网关错误代码先整理出来供大家查询,希望可以帮助到大家,若有的代码没有更新,还请大家跟帖留下,我会及时更新上. 错误码 原因描述 改进建议 MK:0255 未确定的错误原因. 保留. MK:0210 MS错误. 检查被叫手机是否有接收短消息的功能. MK:0209 SIM中没有存储短消息的能力. 检查被叫手机的SIM卡是否不能存储短消息. MK:0208 SIM(Subscriber Id

linux上nagios安装完整版

监控server端的安装部署一.apache的安装下载httpd-2.2.15.tar.gz gunzip httpd-2.2.15.tar.gztar xvf httpd-2.2.15.tarcd httpd-2.2.15./configure --prefix=/usr/local/apache2 --enable-so --enable-mods-shared=all --enable-cgi --enable-rewrite --enable-deflate --with-mpm=wor

Java多线程完整版基础知识

Java多线程完整版基础知识 (翟开顺由厚到薄系列) 1.前言 线程是现代操作系统中一个很重要的概念,多线程功能很强大,java语言对线程提供了很好的支持,我们可以使用java提供的thread类很容易的创建多个线程.线程很不难,我对之前学习过的基础,在这做了一个整理,本文主要参考的是Java研究组织出版的j2se进阶和张孝祥-java就业培训教材这两本书 2.概述 2.1线程是什么 主要是线程与进程的区别,这里不再阐述,自行网上搜索 为什么使用线程:操作系统切换多个线程要比调度进程在速度上快很

Android照片墙完整版,完美结合LruCache和DiskLruCache

转载地址:http://blog.csdn.net/guolin_blog/article/details/34093441#comments 在上一篇文章当中,我们学习了DiskLruCache的概念和基本用法,但仅仅是掌握理论知识显然是不够的,那么本篇文章我们就来继续进阶一下,看一看在实战当中应该怎样合理使用DiskLruCache.还不熟悉DiskLruCache用法的朋友可以先去参考我的上一篇文章 Android DiskLruCache完全解析,硬盘缓存的最佳方案 . 其实,在真正的项