【解決方法】ffmpeg と C# を使用してデバイスをキャッチするにはどうすればよいですか?

プログラミングQA


ffmpeg.exeを使用してデバイスをキャッチしたいと考えています。 Processクラスと関連するffmpegコマンドを使用しましたが、成功しませんでした

私が試したこと:

次のコードを使用しましたが、出力は何もありません!! process.start() が実行されるとすぐにプロセスが終了したため、これが発生すると思います。 どうやってやるの?

C#
static void Main(string[] args)
    {
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.CreateNoWindow = false;
        startInfo.UseShellExecute = false;
        startInfo.FileName = "ffmpeg.exe";
        startInfo.Arguments = "-list_devices true -f dshow -i dummy";
        startInfo.RedirectStandardOutput = false;


        try
        {
            using (Process process = Process.Start(startInfo))
            {
                while (!process.StandardOutput.EndOfStream)
                {
                    string line = process.StandardOutput.ReadLine();
                    Console.WriteLine(line);
                }

                process.WaitForExit();
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }

        Console.ReadKey();
    }
}

解決策 1

出力を「キャプチャ」したいですか? これであなたの質問に答えられるはずです: c# – .NETアプリケーションからのコンソール出力のキャプチャ(C#)[^]

解決策 2

私も同じ問題を抱えていました。 標準出力をリダイレクトしていましたが、FFmpeg はテキストメッセージを標準エラーに出力します。

C#
static void Main(string[] args)
    {
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.CreateNoWindow = false;
        startInfo.UseShellExecute = false;
        startInfo.FileName = "ffmpeg.exe";
        startInfo.Arguments = "-hide_banner -list_devices true -f dshow -i dummy";
        startInfo.RedirectStandardError = true;

        try
        {
            using (Process process = Process.Start(startInfo))
            {
                while (!process.StandardError.EndOfStream)
                {
                    string line = process.StandardError.ReadLine();
                    Console.WriteLine(line);
                }

                process.WaitForExit();
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }

        Console.ReadKey();
    }
}

ヒント: ffmpeg 引数で -hide_banner を使用すると、次のステップが簡単になります 🙂

誰かの役に立てば幸いです。

コメント

タイトルとURLをコピーしました