博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 使用 ffmpeg 进行音频转码
阅读量:4589 次
发布时间:2019-06-09

本文共 2729 字,大约阅读时间需要 9 分钟。

先放一下 ffmpeg 的官方文档以及下载地址:

官方文档:
下载地址:


ffmpeg 进行转码很简单,全部都用默认参数的话用下面这句就行:

ffmpeg.exe -i D:\test\1.aac -y D:\test\1.mp3    -- 1.aac是要转码的输入文件,1.mp3是输出文件,-y是覆盖输出文件的意思

当然 ffmpeg 支持很多参数,比如使用什么编码器,指定码率等等……这里就不详细说了(关键是我也不懂hhh)

了解了这个强大的工具怎么用之后,就是在 C# 里怎么用它啦~~

也很简单,用 Process 启动一个进程去调用 ffmpeg 就好了。

直接上代码,我写了一个控制台程序,接收两个参数,分别是输入文件和输出文件(都是绝对路径),然后调用 ffmpeg 进行转码,最终完成转码并输出相应操作信息。

using System;using System.Diagnostics;namespace AudioTranscoding{    class Program    {        static void Main(string[] args)        {            Process process = new Process();            try            {                if (args.Length != 2)                {                    Console.WriteLine("参数不合法");                    return;                }                string inputFile = args[0];                string outputFile = args[1];                process.StartInfo.FileName = "ffmpeg.exe";  // 这里也可以指定ffmpeg的绝对路径                process.StartInfo.Arguments = " -i " + inputFile + " -y " + outputFile;                process.StartInfo.UseShellExecute = false;                process.StartInfo.CreateNoWindow = true;                process.StartInfo.RedirectStandardOutput = true;                process.StartInfo.RedirectStandardInput = true;                process.StartInfo.RedirectStandardError = true;                process.ErrorDataReceived += new DataReceivedEventHandler(Output);  // 捕捉ffmpeg.exe的错误信息                DateTime beginTime = DateTime.Now;                process.Start();                process.BeginErrorReadLine();   // 开始异步读取                Console.WriteLine("\n开始音频转码...\n");                process.WaitForExit();    // 等待转码完成                if (process.ExitCode == 0)                {                    int exitCode = process.ExitCode;                    DateTime endTime = DateTime.Now;                    TimeSpan t = endTime - beginTime;                    double seconds = t.TotalSeconds;                    Console.WriteLine("\n转码完成!总共用时:" + seconds + "秒\n");                }                // ffmpeg.exe 发生错误                else                {                    Console.WriteLine("\nffmpeg.exe 程序发生错误,转码失败!");                }            }            catch (Exception ex)            {                Console.WriteLine("\n错误!!" + ex.ToString());            }            finally            {                process.Close();            }        }        private static void Output(object sendProcess, DataReceivedEventArgs output)        {            Process p = sendProcess as Process;            if (p.HasExited && p.ExitCode == 1) // 在ffmpeg发生错误的时候才输出信息            {                Console.WriteLine(output.Data);            }        }    }}

运行结果:

转码成功:

这里写图片描述

发生错误:

这里写图片描述


参考:

 

转载于:https://www.cnblogs.com/dandelion-drq/p/8700056.html

你可能感兴趣的文章
微软云数据库SQL Azure
查看>>
Amazon DynamoDB
查看>>
云数据库概念
查看>>
云数据库与其他数据库的关系
查看>>
HBase 表和Region
查看>>
HBase功能组件
查看>>
UMP系统架构 RabbitMQ
查看>>
UMP系统架构 Mnesia
查看>>
UMP系统架构 Controller服务器
查看>>
UMP系统架构 Zookeeper
查看>>
HBase+Redis
查看>>
UMP系统架构 LVS
查看>>
Store工作原理
查看>>
HBase Ambari
查看>>
HLog工作原理
查看>>
构建HBase二级索引
查看>>
HBase Master-status
查看>>
HBase Region的定位
查看>>
HBase Ganglia
查看>>
HBase系统架构
查看>>