0

毎晩、一連の GoToMeeting Video ファイルをトランスコードするタスクを与えられています。ビデオがトランスコードされると、Web サイトにアップロードされます。ただし、プロジェクトに飛び込む前に、これが可能かどうかを確認したいと思いました.

現在のサンプル スクリプトは単純なバッチ ファイルで、複数のファイルをバッチ ファイルにドラッグ アンド ドロップできます。最初のファイルをトランスコードし、出力を表示してから、2 番目のファイルをトランスコードします。これは、私が探している予想される動作です。

@echo off
C:\g2mtranscoder.exe source=%~1
echo %~1 has completed.
C:\g2mtranscoder.exe source=%~2
echo %~2 has completed.
C:\g2mtranscoder.exe source=%~3
echo %~3 has completed.
C:\g2mtranscoder.exe source=%~4
echo %~4 has completed.
pause

g2mtranscoder.exe私の質問は、C# (最終的には Windows サービスになる) の場合、外部プログラムを呼び出してトランスコーディングを実行し、その後すぐにアップロード スクリプトを配置するのと同じくらい簡単でしょうか? 明らかに、現在トランスコードされているビデオをアップロードしたくないし、最初にトランスコードされていないビデオをアップロードしたくない.

私のサブ質問は、ディレクトリの内容がトランスコードされる保留中のビデオのみである場合、これを(ディレクトリ内の各ファイルに対して)ループに入れると問題が発生するでしょうか? ループ内にある場合、ループしてディレクトリ内のすべてのファイルのトランスコーディングを非同期的に開始しようとしますか、それともより同期的でしょうか? ループが非同期で発生するのを避けたいと思います。マシンに過負荷がかかり、オーディオ/ビデオのタイミングでアーティファクトや同期の問題が発生する可能性があるためです。最も重要なことは、トランスコード中の動画またはトランスコードされていない動画をアップロードできないことです。

これに関するコーディングの提案は素晴らしいものですが、実行された C# コードの途中で呼び出される外部プログラムを使用して、C# がコードの実行とどのように連携するかをもっと理解したいと思っています。

私はどちらかというと Ruby/Rails と Linux の方で、C# の経験はあまりありません。私は危険であることを十分に知っていますが、私がやろうとしていることが実現可能であることを確認したいだけです.

4

1 に答える 1

0

私はそれを考え出した。プロセスを作成し、HasExited フラグを使用してプロセスが終了するのを待つことができます。完了したら、プログラムをアップロードし続けることができます。成功した終了のHasExited値は に0なりますが、失敗した終了の値は1またはになります-1

StartInfo.Argumentssource=<location of GTM video>ビデオファイルを処理するために渡すことができます。

Console.WriteLine("Running");
Process pr = new Process();
pr.StartInfo.FileName = "Notepad.exe";
pr.StartInfo.Arguments = "test.dat";
pr.Start();
while (pr.HasExited == false)
    if ((DateTime.Now.Second % 5) == 0)
    { // Show a tick every five seconds.
        Console.Write(".");
        System.Threading.Thread.Sleep(1000);
    }
于 2013-07-28T13:52:11.910 に答える