C# 使用 ffmpeg 进行音频转码

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Dandelion_drq/article/details/73824886

先放一下 ffmpeg 的官方文档以及下载地址:
官方文档:http://ffmpeg.org/ffmpeg.html
下载地址:http://ffmpeg.org/download.html


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);
            }
        }
    }
}

运行结果:

转码成功:
这里写图片描述

发生错误:
这里写图片描述


参考:
ffmpeg常用转换命令
.net 调用 ffmpeg 转换音频文件amr - mp3

猜你喜欢

转载自blog.csdn.net/Dandelion_drq/article/details/73824886