架構師_程序員

 找回密碼
 注冊[Register]

QQ登錄

只需一步,快速開始

查看: 229|回復: 0

[控制臺程序] C# 使用 ffmpeg 進行音頻轉碼

[復制鏈接]
跳轉到指定樓層
樓主
發表于 2019-11-8 15:17:53
zu
官方文檔:http://ffmpeg.org/ffmpeg.html
下載地址:http://ffmpeg.org/download.html

用 ffmpeg 進行轉碼很簡單,全部都用默認參數的話用下面這句就行:

  1. ffmpeg.exe -i D:\test\1.aac -y D:\test\1.mp3    -- 1.aac是要轉碼的輸入文件,1.mp3是輸出文件,-y是覆蓋輸出文件的意思
復制代碼
當然 ffmpeg 支持很多參數,比如使用什么編碼器,指定碼率等等……這里就不詳細說了(關鍵是我也不懂hhh)

了解了這個強大的工具怎么用之后,就是在 C# 里怎么用它啦~~

也很簡單,用 Process 啟動一個進程去調用 ffmpeg 就好了。

直接上代碼,我寫了一個控制臺程序,接收兩個參數,分別是輸入文件和輸出文件(都是絕對路徑),然后調用 ffmpeg 進行轉碼,最終完成轉碼并輸出相應操作信息。

  1. using System;
  2. using System.Diagnostics;

  3. namespace AudioTranscoding
  4. {
  5.     class Program
  6.     {
  7.         static void Main(string[] args)
  8.         {
  9.             Process process = new Process();

  10.             try
  11.             {
  12.                 if (args.Length != 2)
  13.                 {
  14.                     Console.WriteLine("參數不合法");
  15.                     return;
  16.                 }

  17.                 string inputFile = args[0];
  18.                 string outputFile = args[1];

  19.                 process.StartInfo.FileName = "ffmpeg.exe";  // 這里也可以指定ffmpeg的絕對路徑
  20.                 process.StartInfo.Arguments = " -i " + inputFile + " -y " + outputFile;
  21.                 process.StartInfo.UseShellExecute = false;
  22.                 process.StartInfo.CreateNoWindow = true;
  23.                 process.StartInfo.RedirectStandardOutput = true;
  24.                 process.StartInfo.RedirectStandardInput = true;
  25.                 process.StartInfo.RedirectStandardError = true;
  26.                 process.ErrorDataReceived += new DataReceivedEventHandler(Output);  // 捕捉ffmpeg.exe的錯誤信息

  27.                 DateTime beginTime = DateTime.Now;

  28.                 process.Start();
  29.                 process.BeginErrorReadLine();   // 開始異步讀取

  30.                 Console.WriteLine("\n開始音頻轉碼...\n");

  31.                 process.WaitForExit();    // 等待轉碼完成

  32.                 if (process.ExitCode == 0)
  33.                 {
  34.                     int exitCode = process.ExitCode;
  35.                     DateTime endTime = DateTime.Now;
  36.                     TimeSpan t = endTime - beginTime;
  37.                     double seconds = t.TotalSeconds;
  38.                     Console.WriteLine("\n轉碼完成!總共用時:" + seconds + "秒\n");
  39.                 }
  40.                 // ffmpeg.exe 發生錯誤
  41.                 else
  42.                 {
  43.                     Console.WriteLine("\nffmpeg.exe 程序發生錯誤,轉碼失敗!");
  44.                 }
  45.             }
  46.             catch (Exception ex)
  47.             {
  48.                 Console.WriteLine("\n錯誤!!" + ex.ToString());
  49.             }
  50.             finally
  51.             {
  52.                 process.Close();
  53.             }
  54.         }

  55.         private static void Output(object sendProcess, DataReceivedEventArgs output)
  56.         {
  57.             Process p = sendProcess as Process;
  58.             if (p.HasExited && p.ExitCode == 1) // 在ffmpeg發生錯誤的時候才輸出信息
  59.             {
  60.                 Console.WriteLine(output.Data);
  61.             }
  62.         }
  63.     }
  64. }
復制代碼
運行結果:

轉碼成功:









上一篇:碼出高效:Java 開發手冊
下一篇:施工組織設計大全+施工軟件+畢業設計
帖子永久地址: 

架構師_程序員 - 論壇版權1、本主題所有言論和圖片純屬會員個人意見,與本論壇立場無關
2、本站所有主題由該帖子作者發表,該帖子作者與架構師_程序員享有帖子相關版權
3、其他單位或個人使用、轉載或引用本文時必須同時征得該帖子作者和架構師_程序員的同意
4、帖子作者須承擔一切因本文發表而直接或間接導致的民事或刑事法律責任
5、本帖部分內容轉載自其它媒體,但并不代表本站贊同其觀點和對其真實性負責
6、如本帖侵犯到任何版權問題,請立即告知本站,本站將及時予與刪除并致以最深的歉意
7、架構師_程序員管理員和版主有權不事先通知發貼者而刪除本文

碼農網,只發表在實踐過程中,遇到的技術難題,不誤導他人。
您需要登錄后才可以回帖 登錄 | 注冊[Register]

本版積分規則

免責聲明:
碼農網所發布的一切軟件、編程資料或者文章僅限用于學習和研究目的;不得將上述內容用于商業或者非法用途,否則,一切后果請用戶自負。本站信息來自網絡,版權爭議與本站無關。您必須在下載后的24個小時之內,從您的電腦中徹底刪除上述內容。如果您喜歡該程序,請支持正版軟件,購買注冊,得到更好的正版服務。如有侵權請郵件與我們聯系處理。

Mail To:help@itsvse.com

QQ|Archiver|手機版|小黑屋|架構師 ( 魯ICP備14021824號-2 )|網站地圖

GMT+8, 2020-1-24 12:11

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表
吉林快三走势图