-1

この質問にはすでに答えがあります。

私はNRECOを使ってビデオコンバータをコーディングしています、そしてffmpegはすべてうまくいきます、しかしそれが進歩時間を得るために来るとき 私はもう試した

pgbConversion.Value = FFMpegConverter.ConvertProgress();

それは不可能ですので、私は得た! ** ** ConvertProgressは偶数です。偶数ハンドラを追加する方法についてはC#のドキュメントを確認してください。****

NRecoから ConvertProgrssがイベントであることを知っているビデオの進行状況を取得する方法


  • 「イベント」を意味していませんか。でもないですか?その場合、おそらくラムダを使用して、式をどのプロパティに割り当てる必要があるのかを確認します。このフレームワークには慣れていませんが、ボタンクリックイベントに関数を追加したい場合は、button.onClick + =(s、e)=>のようになります。 DoSomething(); - Kirkland

2 답변


2

あなたはこれを書きます:

FFMpegConverter.ConvertProgress +=

きみのVisual Studioは、イベントハンドラーコードをConvertProgressイベントに添付することで、ユーザーを支援します。次のようにポップアップが表示されます。俺の私の例では、Visual StudioがイベントハンドラをTimer.Elapsedイベントにアタッチしています。これは、異なるオブジェクト上のまったく異なるイベントです。物事へのイベント:

enter image description here

それから君はTABを押すきみのポップアップで提案を受け入れるビジュアルスタジオ

Visual Studioは基本的なイベントハンドラを足場にしてくれるので、イベントが発生するたびに実行したいコードを追加することができます。これは何ですか俺のタイマーを使って私の例にイベントハンドラを追加している間に私がタブを押したときにvisual studioはしました:

enter image description here

(当然のことながら、私の写真では、VSがTimer.Elapsedのハンドラーを作成しています。FFMpegConverter.ConvertProgressは作成されていません。Timerがありますが、そのFFMpegConverterクラスはありません。」写真は説明のみを目的としています - 私の写真に写っているコードをタイプすることは想定されていません ")


  • こんにちは答えてくれてありがとう、しかし私はこの行にエラーが出ます - DevFranzBeta
  • FFMpegConverter.ConvertProgress + = new System.Timers.Timer()。経過+ = Program_Elapsed; - DevFranzBeta
  • 私の記事の最後の行を読みましたか? - Caius Jard
  • オブジェクトの参照は、静的でないフィールド、メソッド、またはプロパティに対して必要です。' FFMpegConverter.ConvertProgress'タイプ' void'を暗黙的に変換することはできません〜に - DevFranzBeta
  • 申し訳ありませんが、まだ読んでいません。 - DevFranzBeta

1

あなたはそれがタイプミスではないとあなたは確信していますか?それらは「イベント」を意味しますか?その場合は、イベントにラムダ式を代入します。または、以下に示すように別のメソッドを参照することもできます。そのため、ドキュメントは次のようになります。ラムダ式イベント

ラムダなしの例:

static void Main(string[] args)
{
    var ffMpeg = new FFMpegConverter();
    ffMpeg.ConvertProgress += FfMpeg_ConvertProgress;
    ffMpeg.ConvertMedia("input.mov", "output.mp4", Format.mp4);
}

private static void FfMpeg_ConvertProgress(object sender, ConvertProgressEventArgs e)
{
    // Percent complete as a double
    pgbConversion.Value = e.Processed.TotalSeconds / e.TotalDuration.TotalSeconds;
}

ラムダ式の例:

static void Main(string[] args)
{
    var ffMpeg = new FFMpegConverter();
    ffMpeg.ConvertProgress += (s, e) => {
        pgbConversion.Value = e.Processed.TotalSeconds / e.TotalDuration.TotalSeconds;
    };
    ffMpeg.ConvertMedia("input.mov", "output.mp4", Format.mp4);
}

このイベントには、ビデオの合計秒数と処理された秒数しかありません。それらはTimeSpanオブジェクトとしても表されます。これらのそれぞれの合計秒数を取得し(doubleを返す)、次に分割して完了率を取得することをお勧めします。もちろん、あなたはそれらのどちらかを使うことができます期間インスタンスは個別に。


  • おかげで、私はここでエラーがあります。pgbConversion.Value =それは静的ではないことを示しています - DevFranzBeta
  • コードを追加してもらえますか? pgbConversionが.NETライブラリの標準部分をインスタンス化するクラスはありますか? - Kirkland
  • どのようにしてラムダバージョンの使用を中止しましたか?私はそれがかなりきれいだと思った。 - Caius Jard
  • 質問に直接関連していませんでした。私は、回答の技術レベルよりも具体的に求められていることを優先したいと思いました。あなたが尋ねたので、しかし、私はそれを追加することができます:) - Kirkland

リンクされた質問


関連する質問

最近の質問