1. 程式人生 > >C# 使用 ffmpeg 進行音訊轉碼

C# 使用 ffmpeg 進行音訊轉碼

先放一下 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