[C#] 擷取 FFmpeg 的輸出文字時,中文字會呈現亂碼

當透過 C# 中的 System.Diagnostics.Process 啟動 FFmpeg,並擷取出 FFmpeg 所輸出的文字時,輸出文字內的中文會呈現亂碼。這是因為 FFmpeg 預設的輸出文字編碼為 UTF-8,但 System.Diagnostics.Process 預設的輸出文字編碼為 Big5

以下將完整示範如何正確擷取出 FFmpeg 的輸出文字。

var ffmpegPath = "put your ffmpeg path here";

// 顯示可用的音效設備
var ffmpegArgument = "-list_devices true -f dshow -i dummy";

var process = new System.Diagnostics.Process();
var startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.FileName = ffmpegPath;
startInfo.Arguments = ffmpegArgument;
startInfo.UseShellExecute = false;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;

// 將 StandardErrorEncoding 改為 UTF-8 才不會出現中文亂碼
startInfo.StandardErrorEncoding = System.Text.Encoding.UTF8;

process.EnableRaisingEvents = true;
process.StartInfo = startInfo;
process.Start();

// 讀取輸出文字
string output = process.StandardError.ReadToEnd();
process.WaitForExit();